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

  1. 一个JSON对象——JSONObject
{"name":"胡小威" , "age":20 , "male":true}
  1. 一个JSON数组——JSONArray
[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]
  1. 复杂一点的JSONObject
{
"name":"胡小威", 
"age"=20, 
"male":true, 
"address":{"street":"岳麓山南", "city":"长沙","country":"中国"}
}
  1. 复杂一点的JSONArray
[

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

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

]
  1. 来个更复杂的,这是我从爱帮公交上扒取的数据
 {
"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:
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)
     {    
        e.printStackTrace();  
    }  
}

js:
success: function(result)
{
   var name = result.name;
   var age = result.age;
   var male = result.male;
}
  1. [{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]
java:
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) 
    { 
        e.printStackTrace();  
    }  
 }

 js:
 success : function(result)
{
     for( var key in result )
     {
       var data = new Object();
       data = result[key];
       var name = data.name;
       var age = data.age;
       var male = data.male;
     }
 }
  1. {"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) 
    {   
        e.printStackTrace();  
    }  
 }
  1. [{"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) 
    {   
        e.printStackTrace();  
    }  
    Log.v("juno", persons.toString());  
  }
  1. {"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;  
}

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

maven添加gson依赖包

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

可以使用两种方法解析
1.通过获取JsonReader对象解析JSON数据:

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());  
}
最后修改:2023 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏