想用arraylist将json字符串反序列化为java对象

时间:2015-08-17 06:11:50

标签: java json jackson deserialization

java对象:MyObject有一个AnotherObject1列表,而AnotherObject1也有一个AnotherObject2列表

text-align

JSON字符串:这是我的json字符串,我希望使用对象映射器创建一个java对象

class MyObject{

private String                  status;

private String                  message;

private List<AnotherObject1>            data;
public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<AnotherObject1> getData() {
        return data;
    }

    public void setData(List<AnotherObject1> data) {
        this.data = data;
        }
}

Class AnotherObject1{
private Integer                 group_id;

 private List<AnotherObject2>           anotherList;
public Integer getGroup_id() {
   return group_id;
}

public void setGroup_id(Integer group_id) {
   this.group_id = group_id;
}

public List<AnotherObject2> getAnotherList() {
  return smsList;
}

public void setAnotherList(List<AnotherObject2> anotherList) {
   this.anotherList = anotherList;
}

}

class AnotherObject2{
  private String                    customid;

    private String                  customid1   ;

    private Long                    mobile;

    private String                  status;

    private String                  country;

    public String getCustomid() {
        return customid;
    }

    public void setCustomid(String customid) {
        this.customid = customid;
    }

    public String getCustomid1() {
        return customid1;
    }

    public void setCustomid1(String customid1) {
        this.customid1 = customid1;
    }

    public Long getMobile() {
        return mobile;
    }

    public void setMobile(Long mobile) {
        this.mobile = mobile;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }


}

ObjectMapper代码 //将字符串转换为响应对象

String response="{\"status\":\"OK\",\"data\":{\"group_id\":39545922,\"0\":{\"id\":\"39545922-1\",\"customid\":\"\",\"customid1\":\"\",\"customid2\":\"\",\"mobile\":\"910123456789\",\"status\":\"XYZ\",\"country\":\"IN\"}},\"message\":\"WE R Happy.\"}"

异常:这是例外

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
objectMapper.readValue(responseBody, MyObject.class);

请指导我如何使它成为可能。

3 个答案:

答案 0 :(得分:2)

您的代码本身无法使用...

private List<AnotherObject1> data; // Your class member is list of AnotherObject1

及以下它用作getter和setter中的SMSDTO列表

public List<SMSDTO> getData() {
    return data;
}

答案 1 :(得分:1)

问题很简单:您声称data应该成为Java List;这要求它的JSON输入应该是JSON数组。但JSON代替的是JSON对象。

因此,您需要更改POJO定义以期望与JSON对象(PO​​JO或java.util.Map)兼容的内容;或JSON包含data的数组。

答案 2 :(得分:0)

首先,Naveen Ramawat表示你的代码不是可编译的。

  • 在类AnotherObject1 getSmsList中应该使用AnotherObject2,而setSmsList也应该将AnotherObject2作为参数。
  • 在类MyObject中,setData和getData应使用AnotherObject1作为参数

其次你的JSON字符串无效,它应该像这样:

{"status":"OK","data":[{"group_id":39545922,"smsList":[{"customid":"39545922-1","customid1":"","mobile":913456789,"status":"XYZ","country":"XYZ"}]}]}

以下是我使用的代码:

MyObject.java:

    import java.util.List;

    class MyObject {

        private String status;

        private String message;

        private List<AnotherObject1> data;

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        public List<AnotherObject1> getData() {
            return data;
        }

        public void setData(List<AnotherObject1> data) {
            this.data = data;
        }
    }

AnotherObject1.java:

    import java.util.List;

    public class AnotherObject1 {
        private Integer group_id;

        private List<AnotherObject2> smsList;

        public Integer getGroup_id() {
            return group_id;
        }

        public void setGroup_id(Integer group_id) {
            this.group_id = group_id;
        }

        public List<AnotherObject2> getSmsList() {
            return smsList;
        }

        public void setSmsList(List<AnotherObject2> smsList) {
            this.smsList = smsList;
        }
    }

AnotherObject2.java:

    public class AnotherObject2 {

        private String customid;

        private String customid1;

        private Long mobile;

        private String status;

        private String country;

        public String getCustomid() {
            return customid;
        }

        public void setCustomid(String customid) {
            this.customid = customid;
        }

        public String getCustomid1() {
            return customid1;
        }

        public void setCustomid1(String customid1) {
            this.customid1 = customid1;
        }

        public Long getMobile() {
            return mobile;
        }

        public void setMobile(Long mobile) {
            this.mobile = mobile;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public String getCountry() {
            return country;
        }

        public void setCountry(String country) {
            this.country = country;
        }

    }

获取JSON字符串:

    import org.json.JSONObject;
    import org.json.XML;

    import com.google.gson.Gson;

    MyObject myObj = new MyObject();
    ArrayList<AnotherObject2> smsList = new ArrayList<AnotherObject2>();
    ArrayList<AnotherObject1> data = new ArrayList<AnotherObject1>();
    AnotherObject1 ao1 = new AnotherObject1();
    ao1.setGroup_id(39545922);
    ao1.setSmsList(smsList);
    AnotherObject2 sms = new AnotherObject2();
    sms.setCountry("XYZ");
    sms.setCustomid("39545922-1");
    sms.setCustomid1("");
    sms.setMobile((long) 913456789);
    sms.setStatus("XYZ");
    smsList.add(sms);
    ao1.setSmsList(smsList);
    data.add(ao1);
    myObj.setStatus("OK");
    myObj.setData(data);
    // Build a JSON string to display
    Gson gson = new Gson();
    String jsonString = gson.toJson(myObj);
    System.out.println(jsonString);
    // Get an object from a JSON string
    MyObject myObject2 = gson.fromJson(jsonString, MyObject.class);
    // Display the new object
    System.out.println(gson.toJson(myObject2));