简体   繁体   English

如何有效地获取json响应的特定位?

[英]How to get specific bits of json response effectively?

Im requesting data from instagram api when I search for any tag. 我在搜索任何标签时都从instagram API请求数据。 In return I get a massive chunk of json data corresponding to like 20 pictures. 作为回报,我得到了大量的json数据,相当于20张图片。 The response below is the chunk I used to generate my pojos online 下面的响应是我用来在线生成pojos的块

{
  "pagination":  {
    "next_max_tag_id": "1193052000552992097",
    "deprecation_warning": "next_max_id and min_id are deprecated for this endpoint; use min_tag_id and max_tag_id instead",
    "next_max_id": "1193052000552992097",
    "next_min_id": "1193052554319844057",
    "min_tag_id": "1193052554319844057",
    "next_url": "https://api.instagram.com/v1/tags/cats/media/recent?access_token=631477962.1fb234f.f7c5cda97c7f4df983b1c764f066ed37&max_tag_id=1193052000552992097"
  },
  "meta":  {
    "code": 200
  },
  "data":  [
     {
      "attribution": null,
      "tags":  [
        "cats",
        "caseworker",
        "homestuck"
      ],
      "type": "image",
      "location": null,
      "comments":  {
        "count": 0,
        "data":  []
      },
      "filter": "Normal",
      "created_time": "1456442969",
      "link": "https://www.instagram.com/p/BCOkvoim1LZ/",
      "likes":  {
        "count": 0,
        "data":  []
      },
      "images":  {
        "low_resolution":  {
          "url": "https://scontent.cdninstagram.com/t51.2885-15/s320x320/e35/12729405_224148847934280_1450226662_n.jpg?ig_cache_key=MTE5MzA1MjU1NDMxOTg0NDA1Nw%3D%3D.2",
          "width": 320,
          "height": 320
        },
        "thumbnail":  {
          "url": "https://scontent.cdninstagram.com/t51.2885-15/s150x150/e35/12729405_224148847934280_1450226662_n.jpg?ig_cache_key=MTE5MzA1MjU1NDMxOTg0NDA1Nw%3D%3D.2",
          "width": 150,
          "height": 150
        },
        "standard_resolution":  {
          "url": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/12729405_224148847934280_1450226662_n.jpg?ig_cache_key=MTE5MzA1MjU1NDMxOTg0NDA1Nw%3D%3D.2",
          "width": 640,
          "height": 640
        }
      },
      "users_in_photo":  [],
      "caption":  {
        "created_time": "1456442969",
        "text": "Bitch! I'm fabulous! That's my case worker..she is obsessed with cats\n\n#cats #caseworker #homestuck",
        "from":  {
          "username": "strider_inc",
          "profile_picture": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12558836_953196128050469_1739102_a.jpg",
          "id": "2322171747",
          "full_name": "WE All 4EVER KAWAII TRASH GODS"
        },
        "id": "1193052563471815092"
      },
      "user_has_liked": false,
      "id": "1193052554319844057_2322171747",
      "user":  {
        "username": "strider_inc",
        "profile_picture": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12558836_953196128050469_1739102_a.jpg",
        "id": "2322171747",
        "full_name": "WE All 4EVER KAWAII TRASH GODS"
      }
    }

So when I do that I get like 10-12 different pojo classes into which I should map this data. 所以当我这样做时,我得到了10-12个不同的pojo类,应该将这些数据映射到其中。 Now firstly...Im just trying that out and Im 100% Ill have some problem mapping them I mean gson will do it for me but i dont know if there are any more that I would need etc. 现在首先...我只是尝试一下,Im 100%生病了映射它们时遇到的一些问题,我的意思是gson会为我做,但是我不知道是否还有其他需要的东西,等等。

but most importantly my app only needs the low standard url pictures all the other information is useless for me. 但最重要的是,我的应用只需要低标准的url图片,其他所有信息对我来说都是无用的。

Ofcourse, I know one way to do it which is to convert the whole thing into a string and parse the whole string through multiple times looking for key words etc and making images etc. I dont want to do that because its ugly. 当然,我知道这样做的一种方法是将整个事物转换为字符串,并通过多次查找关键字等并制作图像等的方式来分析整个字符串。我不想这样做,因为它很丑陋。 It works but I want a concise way of doing that at the same time without mapping completely. 它可以工作,但我想在不完全映射的情况下同时做到这一点的简洁方法。

Using Gson's JsonParser class, you can parse your JSON into a tree of JsonElements , and then extract just the data that you need. 使用Gson的JsonParser类,您可以将JSON解析为JsonElements树,然后仅提取所需的数据。

For example, in order to print out all the low resolution URLs, you could use the following code: 例如,为了打印出所有低分辨率URL,可以使用以下代码:

String json = "...";

JsonParser parser = new JsonParser();
JsonObject object = parser.parse(json).getAsJsonObject();
JsonArray data = object.getAsJsonArray("data");

for (JsonElement element : data) {
    JsonObject images = element.getAsJsonObject().getAsJsonObject("images");
    JsonObject lowResolution = images.getAsJsonObject("low_resolution");
    String url = lowResolution.getAsJsonPrimitive("url").getAsString();
    System.out.println(url);
}

Using your example JSON, this would print: 使用示例JSON,将输出:

https://scontent.cdninstagram.com/t51.2885-15/s320x320/e35/12729405_224148847934280_1450226662_n.jpg?ig_cache_key=MTE5MzA1MjU1NDMxOTg0NDA1Nw%3D%3D.2

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何从json响应中获取特定对象 - How to get specific object from json response 如何从方法响应JSON获取特定对象 - How can I get specific object from methods response JSON 如何从大型 json 响应中正确获取特定行? - How to correctly get specific lines from a large json response? 如何从JAX-RS获取JSON响应的特定值? - how to get the specific value of JSON response from JAX-RS ? Android:如何使用改型从json响应中获取特定字符串? - Android: How to get specific string from json response using retrofit? 如何获得特定响应 json 在播放框架中使用 javaWS - how to get specific response json use javaWS in play framework 显示我的 GET 端点的特定 JSON 响应 - Showing a specific JSON response for my GET endpoint 如何在JSON响应中返回对象的特定部分 - How to return specific part of object in JSON response 对于 Spring Boot 中的 GET 请求,如何在单个 JSON 响应中发送 Header 中的一些特定信息和 Body 中的一些信息? - How to send some specific info in Header and some info in Body in a single JSON response, for a GET request in Spring boot? 如何从Android中的发布请求响应中获取特定的json键值? - How to get a specific json key value from post request response in Android?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM