在JSON中检索单个深度数组

时间:2018-07-05 06:59:20

标签: java android json

这是JSON

{
  "response": {
    "data": {
      "images": {
        "image": [
      {...

我要访问图像阵列。我想知道以下代码是否是最好的方法:

JSONObject jsonObjectResponse = new JSONObject(jsonString);
JSONObject jsonResponse = jsonObjectResponse.getJSONObject("response");

JSONObject jsonObjectData = new JSONObject(jsonResponse.toString());
JSONObject jsonData = jsonObjectData.getJSONObject("data");

JSONObject jsonObjectImages = new JSONObject(jsonData.toString());
JSONObject jsonImages = jsonObjectImages.getJSONObject("images");

JSONObject jsonObjectImage = new JSONObject(jsonImages.toString());
JSONArray jsonImageArray = jsonObjectImage.getJSONArray("image");

我觉得这需要很长时间才能完成一个简单的任务。有谁有一个更“精心设计”的解决方案? 非常感谢!

7 个答案:

答案 0 :(得分:1)

不,那不是最好的方法。您不断从JSONObject转换为String,然后再次回到JSONObject。您应该可以:

JSONArray jsonImageArray = new JSONObject(jsonString)
    .getJSONObject("response")
    .getJSONObject("data")
    .getJSONObject("images")
    .getJSONArray("image");

即使您仅删除所有的toString调用,它也会变得更加简洁(但我仍然喜欢上面的示例):

JSONObject jsonObjectResponse = new JSONObject(jsonString);
JSONObject jsonResponse = jsonObjectResponse.getJSONObject("response");
JSONObject jsonData = jsonResponse.getJSONObject("data");
JSONObject jsonImages = jsonData.getJSONObject("images");
JSONArray jsonImageArray = jsonImages.getJSONArray("image");

答案 1 :(得分:1)

我认为您可以通过以下方式简单地组合所有这些语句:

JSONObject jsonObjectResponse = new JSONObject(jsonString);
JSONArray jsonImageArray = jsonObjectResponse.getJsonObject("data")
                              .getJsonObject("images")
                              .getJsonArray("image");

答案 2 :(得分:0)

您不能链接getJSONObject函数吗?

JSONObject jsonObjectResponse = new JSONObject("jsonString");
JSONObject jsonImages = jsonObjectResponse.getJSONObject("response").getJSONObject("data")....

答案 3 :(得分:0)

尝试以下操作:

JSONObject jsonObjectResponse = new JSONObject(jsonString);

JSONArray imageArray = jsonObjectResponse.getJSONObject("response")
     .getJSONObject("data")
     .getJSONObject("images")
     .getJSONArray("image")

希望它能起作用。

答案 4 :(得分:0)

您可以用户链接呼叫:

String jsonString = "{\"response\":{\"data\":{\"images\":{\"image\":[]}}}}";

JSONObject json = new JSONObject(jsonString);

JSONArray image = json.getJSONObject("response") 
                      .getJSONObject("data")
                      .getJSONObject("images")
                      .getJSONArray("image");

例如您的image对象,例如{"title":"Some image","url":"http://..."},所以:

JSONObject firstImage = image.getJSONObject(0);
String url = firstImage.getString("url");

或者您可以使用GSON。您的课程:

class ServerAnswer {
    private Response response;

    // constructors, getters, setters
}

class Response {
    private Data data;

    // constructors, getters, setters
}

class Images {
    @SerializedName("image")
    private Image[] images;

    // constructors, getters, setters
}

class Image {
    private String url, title;

    // constructors, getters, setters
}

然后解析:

ServerAnswer answer = new Gson().fromJson(jsonString, ServerAnswer.class);

Image[] images = answer.getResponse().getData().getImages().getImagesArray();
Image firstImage = images[0];
String url = firstImage.getUrl();

答案 5 :(得分:0)

在您的情况下:

   public class Images {
        @SerializedName("image")
        public ArrayList<String> image;
   }

   public class Data {
        @SerializedName("images")
        public Images images;
   }

   public class Response {
        @SerializedName("data")
        public Data data;
   }

   public class MyData {
        @SerializedName("response")
        public Response response;
   }

然后

MyData data = new Gson().fromJson(yourJsonString, MyData.class);

我认为这是最好的方法

答案 6 :(得分:0)

您可以尝试以下代码。

JSONArray jsonResponseArray = new JSONObject(strJson).getJSONObject("response").getJSONObject("data").getJSONObject("images").getJSONArray("image");

希望这会对您有所帮助。