Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >深入研究JSON数据数组Android

深入研究JSON数据数组Android
EN

Stack Overflow用户
提问于 2014-02-05 10:27:14
回答 3查看 970关注 0票数 1

在进一步深入json数据以提取特定的键/值对时,我遇到了一个问题。我只是试图拉出经度/纬度,我认为这是一个子数组的位置,是一个子数组的几何。我的JSON:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
results": [
    {
      "address_components": [
        {
          "long_name": "56",
          "short_name": "56",
          "types": [
            "street_number"
          ]
        },
        {
          "long_name": "Rosario Drive",
          "short_name": "Rosario Dr",
          "types": [
            "route"
          ]
        },
        {
          "long_name": "Waterbury",
          "short_name": "Waterbury",
          "types": [
            "locality",
            "political"
          ]
        },
        {
          "long_name": "New Haven",
          "short_name": "New Haven",
          "types": [
            "administrative_area_level_2",
            "political"
          ]
        },
        {
          "long_name": "Connecticut",
          "short_name": "CT",
          "types": [
            "administrative_area_level_1",
            "political"
          ]
        },
        {
          "long_name": "United States",
          "short_name": "US",
          "types": [
            "country",
            "political"
          ]
        },
        {
          "long_name": "06708",
          "short_name": "06708",
          "types": [
            "postal_code"
          ]
        }
      ],
      "formatted_address": "56 Rosario Drive, Waterbury, CT 06708, USA",
      "geometry": {
        "bounds": {
          "northeast": {
            "lat": 41.5291983,
            "lng": -73.0523455
          },
          "southwest": {
            "lat": 41.5291845,
            "lng": -73.0523456
          }
        },
        "location": {
          "lat": 41.5291845,
          "lng": -73.0523456
        },
        "location_type": "RANGE_INTERPOLATED",
        "viewport": {
          "northeast": {
            "lat": 41.5305403802915,
            "lng": -73.05099656970849
          },
          "southwest": {
            "lat": 41.5278424197085,
            "lng": -73.05369453029151
          }
        }
      },
      "types": [
        "street_address"
      ]
    },
    {
      "address_components": [
        {
          "long_name": "56",
          "short_name": "56",
          "types": [
            "street_number"
          ]
        },
        {
          "long_name": "Rosario Drive",
          "short_name": "Rosario Dr",
          "types": [
            "route"
          ]
        },
        {
          "long_name": "Woodbridge",
          "short_name": "Woodbridge",
          "types": [
            "sublocality",
            "political"
          ]
        },
        {
          "long_name": "Vaughan",
          "short_name": "Vaughan",
          "types": [
            "locality",
            "political"
          ]
        },
        {
          "long_name": "York Regional Municipality",
          "short_name": "York Regional Municipality",
          "types": [
            "administrative_area_level_2",
            "political"
          ]
        },
        {
          "long_name": "Ontario",
          "short_name": "ON",
          "types": [
            "administrative_area_level_1",
            "political"
          ]
        },
        {
          "long_name": "Canada",
          "short_name": "CA",
          "types": [
            "country",
            "political"
          ]
        },
        {
          "long_name": "L4H",
          "short_name": "L4H",
          "types": [
            "postal_code_prefix",
            "postal_code"
          ]
        }
      ],
      "formatted_address": "56 Rosario Drive, Vaughan, ON L4H, Canada",
      "geometry": {
        "bounds": {
          "northeast": {
            "lat": 43.8324404,
            "lng": -79.5703888
          },
          "southwest": {
            "lat": 43.83244029999999,
            "lng": -79.5704073
          }
        },
        "location": {
          "lat": 43.8324404,
          "lng": -79.5704073
        },
        "location_type": "RANGE_INTERPOLATED",
        "viewport": {
          "northeast": {
            "lat": 43.83378933029149,
            "lng": -79.5690490697085
          },
          "southwest": {
            "lat": 43.8310913697085,
            "lng": -79.57174703029152
          }
        }
      },
      "types": [
        "street_address"
      ]
    },
    {
      "address_components": [
        {
          "long_name": "56",
          "short_name": "56",
          "types": [
            "street_number"
          ]
        },
        {
          "long_name": "Rosario Drive",
          "short_name": "Rosario Dr",
          "types": [
            "route"
          ]
        },
        {
          "long_name": "Summerville",
          "short_name": "Summerville",
          "types": [
            "locality",
            "political"
          ]
        },
        {
          "long_name": "Dorchester",
          "short_name": "Dorchester",
          "types": [
            "administrative_area_level_2",
            "political"
          ]
        },
        {
          "long_name": "South Carolina",
          "short_name": "SC",
          "types": [
            "administrative_area_level_1",
            "political"
          ]
        },
        {
          "long_name": "United States",
          "short_name": "US",
          "types": [
            "country",
            "political"
          ]
        },
        {
          "long_name": "29483",
          "short_name": "29483",
          "types": [
            "postal_code"
          ]
        }
      ],
      "formatted_address": "56 Rosario Drive, Summerville, SC 29483, USA",
      "geometry": {
        "bounds": {
          "northeast": {
            "lat": 33.0303119,
            "lng": -80.2500213
          },
          "southwest": {
            "lat": 33.0302964,
            "lng": -80.2500223
          }
        },
        "location": {
          "lat": 33.0302964,
          "lng": -80.2500213
        },
        "location_type": "RANGE_INTERPOLATED",
        "viewport": {
          "northeast": {
            "lat": 33.0316531302915,
            "lng": -80.24867281970849
          },
          "southwest": {
            "lat": 33.0289551697085,
            "lng": -80.25137078029151
          }
        }
      },
      "partial_match": true,
      "types": [
        "street_address"
      ]
    },
    {
      "address_components": [
        {
          "long_name": "56",
          "short_name": "56",
          "types": [
            "street_number"
          ]
        },
        {
          "long_name": "Rosario Drive",
          "short_name": "Rosario Dr",
          "types": [
            "route"
          ]
        },
        {
          "long_name": "Silver Lake",
          "short_name": "Silver Lake",
          "types": [
            "neighborhood",
            "political"
          ]
        },
        {
          "long_name": "Providence",
          "short_name": "Providence",
          "types": [
            "locality",
            "political"
          ]
        },
        {
          "long_name": "Providence",
          "short_name": "Providence",
          "types": [
            "administrative_area_level_2",
            "political"
          ]
        },
        {
          "long_name": "Rhode Island",
          "short_name": "RI",
          "types": [
            "administrative_area_level_1",
            "political"
          ]
        },
        {
          "long_name": "United States",
          "short_name": "US",
          "types": [
            "country",
            "political"
          ]
        },
        {
          "long_name": "02909",
          "short_name": "02909",
          "types": [
            "postal_code"
          ]
        }
      ],
      "formatted_address": "56 Rosario Drive, Providence, RI 02909, USA",
      "geometry": {
        "bounds": {
          "northeast": {
            "lat": 41.8053438,
            "lng": -71.4620833
          },
          "southwest": {
            "lat": 41.8053382,
            "lng": -71.4621001
          }
        },
        "location": {
          "lat": 41.8053382,
          "lng": -71.4620833
        },
        "location_type": "RANGE_INTERPOLATED",
        "viewport": {
          "northeast": {
            "lat": 41.8066899802915,
            "lng": -71.46074271970849
          },
          "southwest": {
            "lat": 41.8039920197085,
            "lng": -71.46344068029151
          }
        }
      },
      "partial_match": true,
      "types": [
        "street_address"
      ]
    }
  ],
  "status": "OK"
}

我的守则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (response != null)
            {
                JSONObject json;
                try {
                    json = new JSONObject(response);
                    JSONObject results = json.getJSONObject("results");
                    JSONArray geometry = results.getJSONArray("geometry");
                    JSONArray location = geometry.getJSONArray("location");




                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
On this line:                   JSONArray location = geometry.getJSONArray("location");

The method getJsonArray(int) in the type JSONArray is not applicable for the arguments String.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-05 11:31:02

JSON响应对象的结构是:

“结果”是JSONArray,包含4 JSONObjects。

这些JSONObjects包含其他JSONObjects,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"address_components", "formatted_address", "geometry" and "types"

您想要到达JSONObjects "lat“和"lng”,它们位于JSOBObject“位置”,而后者又是JSONObject“几何学”。

整个结构是这样的:

  • JSONArray“结果”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- JSONObject [0]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    - JSONObject "address\_components"
    - JSONObject "formatted\_address"
    - JSONObject "geometry" 
        - JSOBObject "location" 
            - JSOBObject "lat"    <------- you want this
            - JSOBObject "lng"    <------- and this

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- JSONObject [1]

要获得lat和lng,你可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JSONObject json;
    try {
        //create main JSONObject
        json = new JSONObject(response);

        //get results array
        JSONArray results = json.getJSONArray("results");

        //get first JSONObjects in the array
        JSONObject firstObj = results.getJSONObject(0);

        //get JSONObject for key "geometry"
        JSONObject geometry = firstObj.getJSONObject("geometry");

        //get JSONObject for key "location"
        JSONObject location = geometry.getJSONObject("location");

        //get strings for keys "lat" and "lng"
        String lat = location.getString("lat");
        String lng = location.getString("lng");

    } catch (JSONException e) {
        e.printStackTrace();
    }

要获得剩余的lat和lng,只需遍历数组中的所有对象,因此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JSONObject firstObj = results.getJSONObject(1);
JSONObject firstObj = results.getJSONObject(2);
JSONObject firstObj = results.getJSONObject(3);

顺便说一句,json响应开始时缺少了{"。我想这只是一个遗漏,但是您可以检查在jsonlint.com上是否有任何JSON字符串是有效的。

票数 1
EN

Stack Overflow用户

发布于 2014-02-05 10:33:17

答案是错误的:

类型getJsonArray(int)中的方法JSONArray不适用于参数字符串。

它需要一个索引(int),但是您提供了一个键(字符串)。

尝试定位您所追求的参数的索引,并将其传递给它。

或者试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JSONObject geometry = results.getJSONObject("geometry");  
JSONObject location = geometry.getJSONObject("location");
票数 1
EN

Stack Overflow用户

发布于 2014-02-05 10:44:41

geometry的值不是JSONArray,而是JSONObject (注意大括号)。因此,getJSONArray()不能工作。

但是,错误信息有点误导人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21585454

复制
相关文章
Android udp json+数组 --->bytes发送数据
String / int(float)/bool / null / object
用户1289394
2021/07/30
1.1K0
js数组添加json数据[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133387.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/14
11.7K0
java json数组转json对象_json对象数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
10K0
java json数组转json对象_json对象数组
js 数组转json,json转数组[js 数组与json 互相转换]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151825.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
12K0
JSON 数组
JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
陈不成i
2021/07/14
1.7K0
XML转成Json,数组转成Json,Json转成数组
1、数据交互经常用到XML或者Json,其中Json数据居多(优点不多说) 2、ZendFrameWork中如何将XML转换成Json以及数组和Json转换 直接上例子: $arr = array(‘status’ => 1, ‘info’ => ‘json测试’, ‘data’ => array(‘name’ => ‘用户名’, ‘password’ => ‘blog.phpfs.com’)); //数组转Json $json = Zend_Json::encode($arr);//$json =
苦咖啡
2018/05/08
5.2K0
数组->Json
if(!$this->validate()) return false; $price_detail_1 = []; $price_detail = []; $price_detail_1[]['detail_name'] = $this->attributes['detail_name']; $price_detail_1[]['detail_price'] = $this->attributes['detail_price']; $price_detail_1[]['detail_unit'] = $t
botkenni
2022/01/10
1.1K0
js 数组转json和json转数组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151869.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
8K0
json字符串数组转json数组
当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时。 首先要导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包
全栈程序员站长
2022/06/24
5.5K0
php 数组转json对象 和json 数组
php中数组转json的规则是:当没有指定索引(0~n)时会转换为json数组,而指定了索引会转换为json对象。
全栈程序员站长
2022/06/24
6.4K0
js json字符串转json数组_string转json数组
查了很久,也实践了很多,都没有成功。网上说得最多的就是用 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包里面的
全栈程序员站长
2022/11/08
13.3K0
json数组排序
有时需要根据json对象的某个属性排序json数组,javascript端有sort这个函数,具体可以参考:http://www.w3school.com.cn/jsref/jsref_sort.asp
johnhuster的分享
2022/03/28
1.6K0
Android使用OKHTTP解析JSON数据[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Android使用OKHTTP解析JSON数据[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/02/21
2.5K0
MySQL深入研究:表数据操作
可以看到数据已经插入进来,没有填充数据的列已NULL填充,关于这一点,我们可以在创建表的时候通过DEFAULT来指定默认值,就是在这个时候使用的
IT大咖说
2021/07/19
5800
Flutter循环Json数组
import 'package:flutter/material.dart'; //快捷方式:fim void main() { runApp(MyApp()); } //自定义组件 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( home: Scaffo
明知山
2020/09/02
2.6K0
json 数组 string转化
引入fastjson的包 Json转化成对象(数组,等···) //将jsonArray转成数组 JSONArray jsonArray = JSONObject.parseArray("list"); List list = new LinkedList(); if (null != jsonArray) { int len = jsonArray.size(); for (int i = 0; i <= len; i++) { li
gfu
2019/08/28
2.5K0
SpringMVC接收JSON数组
注意,这里可以直接用@RequestBody注解, 当请求体中是一段json数据时,@RequestBody会解析该json字符串并将其注入指定的自定义类型中。(会自动注入成javabean,太方便了) 通过@RequestBody的方式可以接收以json数据传输的对象,但前提是请求的Content-Type必须为application/json
别团等shy哥发育
2023/02/25
1.5K0
SpringMVC接收JSON数组
html json数组拼接
//先定义一个json对象 jsonstr=”[]”; jsonarray = eval(’(’+jsonstr+’)’);
全栈程序员站长
2022/09/01
1.7K0
hive 数组json解析
sql1: select case when ss.col regexp ‘^\{’ and not ss.col regexp ‘\}KaTeX parse error: Got function '\newline' with no arguments as superscript at position 1: \̲n̲e̲w̲l̲i̲n̲e̲’ then concat(’{’,ss.col) when not ss.col regexp ‘^\{’ and not ss.col regexp ‘\}KaTeX parse error: Got function '\newline' with no arguments as superscript at position 1: \̲n̲e̲w̲l̲i̲n̲e̲’ then ss.col end from ( select split(regexp_extract(a.appinfo,’^\[(.+)\]$’,1),’\}\,\{’) as str from ( select ‘[{a:1,b:1},{a:2,b:2},{f:6,k:7}]’ as appinfo ) a ) pp lateral view explode(pp.str) ss as col ;
chimchim
2022/11/13
1.4K0
Android数据加载和Json解析——蓝本
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117232.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/06
5880

相似问题

如何深入研究JSON数据并通过数组循环

14

深入研究json

21

使用Ruby深入研究JSON

21

如何深入研究此JSON对象

221

如何使用Ruby的JSON gem深入研究JSON对象

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文