您的位置:首页 > 移动开发 > Android开发

android 解析各种json 事例总结

2015-04-28 11:29 387 查看
我们给服务器发送请求后,服务器会返回一连串的数据,这时我们就需要解析服务器返回的数据,这些数据大部分情况下都是XML或JSON格式。当然少部分也有HTML格式,

只是解析HTML时比较繁琐而且效率没有JSON高。 下面咱们来讲解一下JSON解析。

JSON的基本数据格式有这几种:

1.一个JSON对象-------JSONObject

{"name":"胡小威" , "age":20 , "male":true}

public void parseJsonObject(String json) {

try {

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.一个JSON数组——JSONArray

[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]
public void parseJSONArray(String json) {

try {

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.复杂一点的JSONObject

{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}

public void parseJsonPerson(String json) {

try {

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();

}

}


4.复杂一点的JSONArray

[

{"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>();

try {

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>();

try {

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++){

if(j==0){

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"));

}

if(j==1){

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 busList;

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}



(1)通过JsonReader对象解析SON数据:

String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";

try{

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();

}


(2)通过把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());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: