2015-09-04 2 views
1

У меня есть строка json, как указано ниже, и мне нужно преобразовать объект List в Android.Как преобразовать комплекс массива Json в объект списка в android

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

В Android я объявляю класс модели с именем MyObject.class

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: [email protected]; line: 242, column: 13] (through reference chain: com.demo.models.MyObject["images"]) 

Пожалуйста, помогите мне, спасибо большое!

+0

Вы уверены, что R.raw.m1 имеет строку json, которую вы нам показываете? –

ответ

0

ИМО, вы можете использовать Gson для вашего вопроса, как следующее:

String jsonString = "[\n" + 
      " {\n" + 
      " \"name\":\"Name1\",\n" + 
      " \"images\":[\"http://abc.jpg\", \"http://aaa.jpg\"]\n" + 
      " },\n" + 
      " {\n" + 
      " \"name\": \"Name2\",\n" + 
      " \"images\":[\"dads\", \"dsadsd\"]\n" + 
      " }\n" + 
      "]"; 
Gson gson = new Gson(); 
MyObject[] object = gson.fromJson(jsonString, MyObject[].class); 
List<MyObject> myObjects = new ArrayList<>(Arrays.asList(object)); 

Надеется, что это помогает!

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(); 
} 
Смежные вопросы