将JSON映射到Java中的数组/对象 - Android

时间:2013-03-16 19:40:44

标签: java android json

我有一个Web系统,它返回一个json字符串,其中包含我在Android App中需要的数据。字符串如下:

[
    {"id":1,
    "title":"Remove ViRuSeS",
    "tagline":"Remove ViRuSeS",
    "body":"Body",
    "image":"index.jpg",
    "steps":[
            {"id":2,
            "title":"Step 1",
            "body":"Download Things!",
            "position":1}
            ]
    }
]

它应该返回一个对象数组,其中一个对象的项也是一个项目数组。

我对gson很熟悉并且过去一直在使用它,但我总是不得不将数据简化为一个对象,这使我最终不得不多次调用来获取数据。

有没有一种好方法可以做到这一点,而不必将所有可能的值映射回类?

我的最后一次尝试是尝试从中获得一些简单的东西,并在第二行中获得NullPointerException

userDet = new JSONObject(string);
JSONArray userDetJson = userDet.getJSONArray("Steps");

2 个答案:

答案 0 :(得分:5)

将其更改为“steps”而不是“Steps”,它会修复它:

userDet = new JSONObject(string);
JSONArray userDetJson = userDet.getJSONArray("steps");

完整的解析方法:

JSONArray mainArray = new JSONArray(json);
for (int i = 0 ; i < mainArray.length() ; i ++)
{
    JSONObject currentItem = array.getJSONObject(i);
    String title = currentItem.getString("title");
    String body = currentItem.getString("body ");
    ....
    JSONArray currentItemStepsArray = currentItem.getJSONArray("steps"); 
    for (int j = 0 ; j < currentItemStepsArray.length() ; j ++)
    {
        ....
    }
}

答案 1 :(得分:2)

在这里,试试这个:

JSONArray topLevelArr = new JSONArray(json);
JSONArray stepArr = topLevelArr.getJSONObject(0).getJSONArray("steps");