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. }  

     

  • 相关阅读:
    CentOS7上安装FTP服务
    CentOS7上安装Nginx、PHP、MySQL
    iOS-高性能编程之多线程
    Autoloader什么鬼
    PHP调用外部命令
    PHP使用Redis【重要】
    Windows系统上Redis的安装
    利用nginx与ffmpeg搭建流媒体服务器
    Ubuntu14.04上安装Composer
    find the most comfortable road(并差集,找差值最小的权值)
  • 原文地址:https://www.cnblogs.com/kabi/p/6306755.html
Copyright © 2011-2022 走看看