如何在android中使用Jackson解析json响应?

sky*_*ine 9 android json jackson

我通过点击网址获得了一些json响应.我想用jackson来解析json的响应.我尝试使用对象Mapper,但我得到了异常.

JSON:

{
    "contacts": [
        {
                "id": "c200",
                "name": "ravi raja",
                "email": "raja@gmail.com",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        },
        {
                "id": "c201",
                "name": "Johnny Depp",
                "email": "johnny_depp@gmail.com",
                "address": "xx-xx-xxxx,x - street, x - country",
                "gender" : "male",
                "phone": {
                    "mobile": "+91 0000000000",
                    "home": "00 000000",
                    "office": "00 000000"
                }
        },

    ]
}
Run Code Online (Sandbox Code Playgroud)

POJO:

public class ContactPojo {

    String name,email,gender,mobileno;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getMobileno() {
        return mobileno;
    }

    public void setMobileno(String mobileno) {
        this.mobileno = mobileno;
    }

}
Run Code Online (Sandbox Code Playgroud)

码:

ObjectMapper mapper=new ObjectMapper();
             userData=mapper.readValue(jsonResponse,ContactPojo.class);
Run Code Online (Sandbox Code Playgroud)

vil*_*e89 7

正如我所看到的,json不是数组,而是包含一个包含数组的对象的对象,因此您需要创建一个临时数据持有者类,以便Jackson对其进行解析.

private static class ContactJsonDataHolder {
    @JsonProperty("contacts")
    public List<ContactPojo> mContactList;
}

public List<ContactPojo> getContactsFromJson(String json) throws JSONException, IOException {

    ContactJsonDataHolder dataHolder = new ObjectMapper()
        .readValue(json, ContactJsonDataHolder.class);

    // ContactPojo contact = dataHolder.mContactList.get(0);
    // String name = contact.getName();
    // String phoneNro = contact.getPhone().getMobileNro();
    return dataHolder.mContactList;
}
Run Code Online (Sandbox Code Playgroud)

对你的班级进行一些调整:

@JsonIgnoreProperties(ignoreUnknown=true)
public class ContactPojo {

    String name, email, gender;
    Phone phone;

    @JsonIgnoreProperties(ignoreUnknown=true)
    public static class Phone {

         String mobile;

         public String getMobileNro() {
              return mobile;
         }
    }

    // ...

    public Phone getPhone() {
        return phone;
    }
Run Code Online (Sandbox Code Playgroud)

@JsonIgnoreProperties(ignoreUnknown = true)注释确保当你的类不包含json中的属性时,你没有得到异常,就像address你的json可以给出异常,或者home在Phone对象中.