【问题标题】:Accessing elements in JSON array访问 JSON 数组中的元素
【发布时间】:2017-11-14 15:53:56
【问题描述】:

我对 JSON 的使用不多,我正在使用 Google Maps Distance Matrix API 来生成一些我想使用的数据。

我想从 duration 中提取数字 14147。

{
   "destination_addresses" : [ "Washington, DC, USA" ],
   "origin_addresses" : [ "New York, NY, USA" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "226 mi",
                  "value" : 364089
               },
               "duration" : {
                  "text" : "3 hours 56 mins",
                  "value" : 14147
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

我尝试了一些不同的东西,这是我最后尝试的(数据只是上面的数组):

String data = getOutputAsText(geoService);
JSONObject json = new JSONObject(data);
String duration = json.getJSONArray("rows").getString("duration");

这是控制台输出:

 org.json.JSONException: JSONObject["duration"] not found

我在发帖前确保环顾四周,但没有发现任何可以帮助我解决这个特殊问题的东西。

我想将值从持续时间传递给我自己的网络服务,我可以这样做,我只是不知道如何提取值。提前谢谢!

【问题讨论】:

  • 创建代表存储在 JSON 中的数据的类,然后使用 Jackson 将 JSON 转换为这些类。
  • 你使用哪个库来解析你的 Json?
  • @DwB 我不会为这个小的 json sn-p 创建 Java 模型。我宁愿“动态地”解析它
  • @ArthurEirich 谢谢 :) 我从您提供的链接和示例中找到了解决方案。
  • @Andremoniy 我编辑了 OP 并没有校对最后一部分,我的错。好尴尬!哈哈

标签: java arrays json google-api


【解决方案1】:

首先请看this的回答。使用org.json 你可以做某事。像这样:

JSONObject obj = new JSONObject("Content of your string here");
JSONArray rows = obj.getJSONArray("rows");
for (int i = 0; i < rows.length(); i++) {
 JSONArray elements = rows.getJSONObject(i).getJSONArray("elements");
  for(int j = 0; j < elements.length(); j++) {
   JSONObject element = elements.getJSONObject(j);
   JSONObject duration = element.getJSONObject("duration");
   int value = duration.getInt("value");
  }
 }

上面的代码使用您的 json 字符串产生了以下输出:14147

附:您可以使用您想要的库。这里使用的这个是为了演示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多