如何将Json数组复制转换为android中的List对象

时间:2015-09-04 16:12:29

标签: android json jackson fasterxml

我有一个json字符串如下,我需要转换为Android中的List对象。

[
  {
    "name":"Name1",
    "images":["http://abc.jpg", "http://aaa.jpg"]
  },
  {
    "name": "Name2",
    "images":["dads", "dsadsd"]
  }
]

在Android中,我声明了一个名为MyObject.class的Model类

class MyObject{
    public String name;
    public List<String> images;
}

public void testConvertJson(){
    ObjectMapper mapper = new ObjectMapper();
    List<MyObject> result = mapper.readValue(getResources().openRawResource(R.raw.m1), new TypeReference<List<MyObject>);
}

结果StackTrace:

09-04 22:47:17.961: W/System.err(5854): com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
09-04 22:47:17.961: W/System.err(5854):  at [Source: android.content.res.AssetManager$AssetInputStream@fe387ee; line: 242, column: 13] (through reference chain: com.demo.models.MyObject["images"])

请帮助我,非常感谢!

2 个答案:

答案 0 :(得分:0)

IMO,您可以使用 Log.i("position",position); 解决您的问题,例如:

Gson

希望这有帮助!

答案 1 :(得分:0)

不确定您使用的方法,我通常会创建自己的解析器。可能不是最有效的,但我个人更了解它。

我认为这应该有效。应该适用于任何类似格式的字符串我相信。

String mess = getResources().getString(R.raw.m1);
List<MyObject> myObjects = new ArrayList<MyObject>();
try {
    JSONArray jsonArray = new JSONArray(mess);
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        MyObject myObject = new MyObject();
        myObject.name = jsonObject.get("name");

        String arrayOfStringString = jsonObject.get("images");
        arrayOfStringString = arrayOfStringString.replace(" ","").replace("[","").replace("]","");
        String[] images =  ArrayarrayOfStringString.split(",");
        myObject.images = java.util.Arrays.asList(images);

        myObjects.add(myObject);
    }
} catch (JSONException e) {
    e.printStackTrace();
}