zoukankan      html  css  js  c++  java
  • 几种不同格式的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}

     

    Java代码  收藏代码
    1. public void parseJsonObject(String json) {  
    2. try {  
    3. new JSONObject(json);  
    4. "name");  
    5. int age = jsonObject.getInt("age");  
    6. boolean male = jsonObject.getBoolean("male");  
    7. //接下来该干嘛干嘛  
    8. catch (JSONException e) {  
    9. // TODO Auto-generated catch block  
    10.         }  
    11.     }  

     

     

    2.[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]

     

     

    Java代码  收藏代码
    1. public void parseJSONArray(String json) {  
    2. try {  
    3. new JSONArray(json);  
    4. for (int i = 0; i < jsonArray.length(); i++) {  
    5.                 String name = jsonObject.getString("name");  
    6. int age = jsonObject.getInt("age");  
    7. boolean male = jsonObject.getBoolean("male");  
    8. //接下来该干嘛干嘛  
    9.         } catch (JSONException e) {  
    10. // TODO Auto-generated catch block  
    11.         }  
    12.     }  

      

     

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

     

     

    Java代码  收藏代码
    1. public void parseJsonPerson(String json) {  
    2. try {  
    3. new JSONObject(json);  
    4. "name");  
    5. int age = jsonObject.getInt("age");  
    6. boolean male = jsonObject.getBoolean("male");  
    7. "address");  
    8. "street");  
    9. "city");  
    10. "country");  
    11. new Address(street, city, country);  
    12. new Person(name, age, male, address);  
    13. catch (JSONException e) {  
    14. // TODO Auto-generated catch block  
    15.         }  
    16.     }  

     

    4.

    [

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

    {"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}

    ]

     

     

     

    Java代码  收藏代码
    1. public void parseJsonArrayPerson(String json) {  
    2. new ArrayList<Person>();  
    3. try {  
    4. new JSONArray(json);  
    5. for (int i = 0; i < jsonArray.length(); i++) {  
    6.                 String name = jsonObject.getString("name");  
    7. int age = jsonObject.getInt("age");  
    8. boolean male = jsonObject.getBoolean("male");  
    9. "address");  
    10. "street");  
    11. "city");  
    12. "country");  
    13. new Address(street, city, country);  
    14. new Person(name, age, male, address);  
    15.                 Log.v("juno", person.toString());  
    16.         } catch (JSONException e) {  
    17. // TODO Auto-generated catch block  
    18.         }  
    19. "juno", persons.toString());  
    20.     }  

     

    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"}]}}

     

    Java代码  收藏代码
    1. public List<Salution> parseJSON(String str){  
    2. "返回的JSON数据:", str);  
    3. new ArrayList<Salution>();  
    4.         try {  
    5. new JSONObject(str);  
    6. "buses");  
    7. "bus");  
    8. for(int i=0;i<busJSArray.length();i++){  
    9.                 JSONObject segsJSObject=busJSObject.getJSONObject("segments");  
    10. "segment");                
    11. new Salution();  
    12.                     for(int j=0;j<segJSArray.length();j++){  
    13. if(j==0){  
    14.                             st.setLine_name1(segJSObject.getString("line_name"));  
    15. "line_name", segJSObject.getString("line_name"));  
    16. "stats"));  
    17. "end_stat"));  
    18. "start_stat"));  
    19.                         if(j==1){  
    20.                             st.setLine_name2(segJSObject.getString("line_name"));  
    21. "line_name", segJSObject.getString("line_name"));  
    22. "stats"));  
    23. "end_stat"));  
    24. "start_stat"));  
    25.                     }  
    26.                     busList.add(st);      
    27.             return busList;  
    28. catch (JSONException e) {  
    29. // TODO Auto-generated catch block  
    30.         }  
    31. return null;  
    32.     }  

     

     这里我只是简单获取了几个我想要的数据。

     

    二、使用JSON类库Gson 来解析JSON

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

     

    首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI

     

    Java代码  收藏代码
    1. google-gson-1.7.1-release.zip   

     

     

     再把gson-1.7.jar copy到libs

    可以使用两种方法解析

     

    ①、通过获取JsonReader对象解析JSON数据:

     

    Java代码  收藏代码
    1. "[{"username":"arthinking","userId":001},{"username":"Jason","userId":002}]";  
    2. try{  
    3. new JsonReader(new StringReader(jsonData));  
    4.     while(reader.hasNext()){  
    5.         while(reader.hasNext()){  
    6.             if(tagName.equals("username")){  
    7.             }  
    8. else if(tagName.equals("userId")){  
    9.             }  
    10.         reader.endObject();  
    11.     reader.endArray();  
    12. catch(Exception e){  
    13. }  

     

     

     

     

    ②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作

    Java代码  收藏代码
    1. new TypeToken<LinkedList<User>>(){}.getType();  
    2. new Gson();  
    3. for (Iterator iterator = users.iterator(); iterator.hasNext();) {  
    4.     System.out.println(user.getUsername());  
    5. }  

     

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/kabi/p/6306755.html
Copyright © 2011-2022 走看看