解析JSON入门

解析JSON入门

 JSON 是现在比较流行的轻量级数据交换语言。要解析json首先要对它的结构有一定的了解。

 JSON 的基本数据格式可以分为

1.JSON 对象——JSONObject
{“name”:”张三” , “age”:20 , “male”:true}
2.JSON数组——JSONArray
[{“name”:”张三” , “age”:20 , “male”:true},{“name”:”小丽” , “age”:25 , “male”:false}]

可以用简单的方法来判断,即{}内的是一个JSONObject,而[]内的是一个JSONArray,在复杂的JSON串也是由这些基本元素构成的,只要一步步解析就可以了。

解析方法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();
             }
           }

[{“name”:”张三” , “age”:20 , “male”:true},{“name”:”小丽” , “age”:25 , “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(); 
        } 
    }

复杂的json只要按部就班的解析就可以了。比如一个形如{ [ { } , { } ,{ a} ] }的JSON串只要按照JSONObject,JSONArray,JSONObject的顺序就可以得到a。

解析方法2:使用JSON库来解析

解析JSON库有很多,这里只介绍一个由Google提供的Gson。它可以在JSON字符串和Java对象间转换。

Gson包可以在 http://search.maven.org/#artifactdetails%7Ccom.google.code.gson%7Cgson%7C2.7%7C 下载。或者自行搜索。

JSON转换为Java对象可以用

gson.fromJson(String json, Class class);

或者

Gson.fromJson(String json, Type typeOfT)

[{“name”:”张三” , “age”:20 , “male”:true},{“name”:”小丽” , “age”:25 , “male”:false}]解析:

方法一:使用type

/**
 * 解析模型
 * @author chenlf
 *
 */
public class User {
    private String name;
    private int age;
    private boolean male;

    public String getName() {
         return name;
    }
    public void setName(String name) {
         this.name = name;
    }
    public int getAge() {
         return age;
    }
    public void setAge(int age) {
         this.age = age;
    }
    public boolean isMale() {
         return male;
    }
    public void setMale(boolean male) {
         this.male = male;
    }
}
 String jsonString = "[{\"name\":\"张三\" , \"age\":20 , \"male\":true},{\"name\":\"小丽\" , \"age\":25 , \"male\":false}]";
 Gson  gson = new Gson();
 Type type = new TypeToken<List<User>>() {
    }.getType();
 List<User> list = new ArrayList<User>();
 list = gson.fromJson(jsonString, type);
 ```

方法二使用class

在这里要注意如果是这样[{"name":"张三" , "age":20 , "male":true},{"name":"小丽" , "age":25 , "male":false}]的json串是无法直接解析的,因为你无法给你的class与json形成对应关系。变形成{"people":[{"name":"张三" , "age":20 , "male":true},{"name":"小丽" , "age":25 , "male":false}] }即可使用

```java
/**
 * 类匹配方式
 * @author chenlf
 *
 */
public class UserArray {

    private List<User> people;

    public List<User> getPeople() {
         return people;
    }

    public void setPeople(List<User> people) {
         this.people = people;
    }


}




<div class="se-preview-section-delimiter"></div>
Gson gson = new Gson();
UserArray userArray = gson.fromJson(jsonString, UserArray.class);




<div class="se-preview-section-delimiter"></div>

Class或Type是我们根据json串来编写的。如json里有一个“name”:”张三”,我们就要在类里加一个string name;的参数。如果实在任性就是不要和json一样,那就使用@SerializedName 参数。

@SerializedName("name")
public String renxing;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值