安卓解析JSON怎么写安卓软件

Android JSON数据格式的解析_小组_ThinkSAAS
Android JSON数据格式的解析
Android JSON数据格式的解析
给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。
JSON的基本数据格式有这几种:
1.一个JSON对象——JSONObject
{"name":"胡小威","age":20 ,"male":true}
2.一个JSON数组——JSONArray
[{"name":"胡小威","age":20 ,"male":true},{"name":"赵小亮","age":22 ,"male":false}]
3.复杂一点的JSONObject
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}}
4.复杂一点的JSONArray
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}},
{"name":"赵小亮","age"=22,"male":false,"address":{"street":"九州港","city":"珠海","country":"中国"}}
5.来个更复杂的,这是我从爱帮公交上扒取的数据
{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
接下来是解析部分
一、直接解析
1.{"name":"胡小威","age":20 ,"male":true}
public void parseJsonObject(String json) {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
//接下来该干嘛干嘛
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
2.[{"name":"胡小威","age":20 ,"male":true},{"name":"赵小亮","age":22 ,"male":false}]
public void parseJSONArray(String json) {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i & jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
//接下来该干嘛干嘛
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
3.{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}}
public void parseJsonPerson(String json) {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
JSONObject addressJSON = jsonObject.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}},
{"name":"赵小亮","age"=22,"male":false,"address":{"street":"九州港","city":"珠海","country":"中国"}}
public void parseJsonArrayPerson(String json) {
List&Person& persons = new ArrayList&Person&();
jsonArray = new JSONArray(json);
for (int i = 0; i & jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
JSONObject addressJSON = jsonObject.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
persons.add(person);
Log.v("juno", person.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.v("juno", persons.toString());
5. {"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
public List&Salution& parseJSON(String str){
Log.d("返回的JSON数据:", str);
List&Salution& busList = new ArrayList&Salution&();
JSONObject jsonObject = new JSONObject(str);
JSONObject busesJSON = jsonObject.getJSONObject("buses");
JSONArray busJSArray=busesJSON.getJSONArray("bus");
for(int i=0;i&busJSArray.length();i++){
JSONObject busJSObject = busJSArray.getJSONObject(i);
JSONObject segsJSObject=busJSObject.getJSONObject("segments");
JSONArray segJSArray=segsJSObject.getJSONArray("segment");
Salution st=new Salution();
for(int j=0;j&segJSArray.length();j++){
JSONObject segJSObject = segJSArray.getJSONObject(j);
st.setLine_name1(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats1(segJSObject.getString("stats"));
st.setEnd_stat1(segJSObject.getString("end_stat"));
st.setStart_stat1(segJSObject.getString("start_stat"));
JSONObject segJSObject = segJSArray.getJSONObject(j);
st.setLine_name2(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats2(segJSObject.getString("stats"));
st.setEnd_stat2(segJSObject.getString("end_stat"));
st.setStart_stat2(segJSObject.getString("start_stat"));
busList.add(st);
return busL
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
这里我只是简单获取了几个我想要的数据。
二、使用JSON类库Gson 来解析JSON
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
首先,从 /p/google-gson/downloads/list下载GsonAPI
google-gson-1.7.1-release.zip
再把gson-1.7.jar copy到libs
可以使用两种方法解析
①、通过获取JsonReader对象解析JSON数据:
String jsonData ="[{"username":"arthinking","userId":001},{"username":"Jason","userId":002}]";
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
reader.endObject();
reader.endArray();
catch(Exception e){
e.printStackTrace();
②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作
Type listType = new TypeToken&LinkedList&User&&(){}.getType();
Gson gson = new Gson();
LinkedList&User& users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
我一般是采用直接解析,添加类库神马的最讨厌了···
还有,抱怨一下,iteye的编辑弱爆了!!!
用户评论(0)
喜欢这个帖子的用户
加载中......
开发技术学习小组列表
PHP开发框架
缓存Memcache
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
手机客户端
ThinkSAAS接收任何功能的Iphone(IOS)和Android手机的客户端定制开发服务
让ThinkSAAS更好,把建议拿来。Android的JSON解析
-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
public class JSONParser {
// 本类是用于解析数据返回的数据用的。
// 返回数据的格式都是JSON,但是可以分为2种,一种是key、values的值对,另一种就是值对数组的数据,分别用两种方法进行解析。
// 下面的方法是解析第一种的,传入参数为服务器返回的数据字符串和由数据key组成的数组,解析后返回值为
// HashMap&String , Object&,就是我们需要的值对。
public HashMap&String, Object& getJSONParserResult(String JSONString,
String[] key) {
HashMap&String, Object& hashMap = new HashMap&String, Object&();
JSONObject result = new JSONObject(JSONString).getJSONObject(
"NewDataSet").getJSONObject("Table");
for (int i = 0; i & key. i++) {
if (result.has(key[i])) {
hashMap.put(key[i], result.get(key[i]));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return hashM
// 下面的方法是解析第二种的,传入参数为服务器返回的数据字符串和由数据key组成的数组,解析后返回值为
// ArrayList&HashMap&String , Object&&,就是我们需要的值对数组。
public ArrayList&HashMap&String, Object&& getJSONParserResultArray(
String JSONString, String[] key) {
ArrayList&HashMap&String, Object&& arrayList = new ArrayList&HashMap&String, Object&&();
HashMap&String, Object& hashM
JSONObject result = new JSONObject(JSONString)
.getJSONObject("NewDataSet");
JSONArray resultArray = result.getJSONArray("Table");
for (int i = 0; i & resultArray.length(); i++) {
JSONObject resultTemp = (JSONObject) resultArray.opt(i);
hashMap = new HashMap&String, Object&();
for (int j = 0; j & key. j++) {
if (resultTemp.has(key[j])) {
hashMap.put(key[j], resultTemp.get(key[j]));
arrayList.add(hashMap);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return arrayL
相关资讯  — 
相关文档  — 
发布时间: 14:35:20
同类热门经验
37832次浏览
104527次浏览
25527次浏览
67701次浏览
35338次浏览
OPEN-OPEN, all rights reserved.android上JSON解析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
2页1下载券31页免费27页免费5页免费27页免费 12页免费25页免费9页免费5页免费14页2下载券
喜欢此文档的还喜欢12页1下载券13页1下载券14页免费11页2下载券27页免费
android上JSON解析|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢请问,这种json字符串怎么解析
- 做最好的安卓开发论坛
请问,这种json字符串怎么解析
是一个jsonobject,多次put(key,value),然后.toString()生成的jsonString,{"103":{},"107":{"credit":1,"headPicture":"ads","nickName":"he","score":1,"struggle":0,"tel":"123"},"108":[]}。这样的该怎么解析呢,我开始解析单个{"107":{"credit":1,"headPicture":"ads","nickName":"he","score":1,"struggle":0,"tel":"123"}}的时候,方法是这么写的, JSONObject jsonObject = new JSONObject(jsonString); JSONArray array = jsonObject.getJSONArray(key);for (int i = 0; i < array.length(); i++) { JSONObject jsonObject2 = array.getJSONObject(i); jsonObject2.getInt();.......}这样解析单个字符串没问题,但是多了几个之后就不行了貌似, 求大神支招啊, 解析方法该怎么写呢, 尽量不使用Gson吧,因为很多地方都不太好改了。。。。
应该这样 例如返回的json数据是这样的 &message&:{12345} 你就应该这样的获取它 data.message 其中data是返回数据 给你个例子 function(data, textStatus) { var inputObj = $(&#show&); inputObj.val(data.message); },'json'); 这是js的处理方法 通用的
其他回答 (2)
好像 你的解析方法写错了 {}是jsonobject 【】是jsonarray 就按照这个原则来就好了
已经解决,多谢。。。
等待您来回答
该问题来自:安卓巴士-做最好的android开发论坛编程领域专家

我要回帖

更多关于 怎么写安卓软件 的文章

 

随机推荐