繁体   English   中英

如何使用JSONObject(org.json)获取嵌套数组

[英]How to get nested arrays with JSONObject (org.json)

这是我的JSON文件的示例:

{

    "type": "FeatureCollection",
    "crs": {
        "type": "name",
        "properties": {
            "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
        }
    },
    "features": [
        {
            "type": "Feature",
            "properties": {
                "KKOD": 414,
                "KATEGORI": "Kommun",
                "KOMMUNKOD": 2584,
                "KOMMUNNAMN": "Kiruna",
                "LANSKOD": 25,
                "LANSNAMN": "Norrbottens län",
                "KOM_KOD": "2584",
                "LAN_KOD": "25"
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            20.468899715356947,
                            69.0576379270828
                        ],
                        [
                            20.54863836554442,
                            69.05997605732921
                        ]
                    ]
                ]
            }
        },
        {
            "type": "Feature",
            "properties": {
                "KKOD": 414,
                "KATEGORI": "Kommun",
                "KOMMUNKOD": 1262,
                "KOMMUNNAMN": "Lomma",
                "LANSKOD": 12,
                "LANSNAMN": "Skåne län",
                "KOM_KOD": "1262",
                "LAN_KOD": "12"
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            13.11196493557692,
                            55.702721301997265
                        ],
                        [
                            13.112159474347964,
                            55.69989518845077
                        ],
                        [
                            13.111027902960512,
                            55.69899875723693
                        ]
                    ]
                ]
            }
        }
    ]

}

我想将坐标数组解析为Java中的Double或String数组。 这就是我设法从属性“ KOMMUNNAMN”获取字符串的方法:

JSONObject json = new JSONObject(readInput()); //readInput() returns the JSON document as String
JSONArray jsonarr = json.getJSONArray("features");
json = jsonarr.getJSONObject(0);
json = json.getJSONObject("properties");
String namn = json.getString("KOMMUNNAMN");

我如何从这里开始? 谢谢!

使用for循环获取JSONObject中的String并将其存储在ArrayList

ArrayList<String> name=new ArrayList<String>();
JSONObject json = new JSONObject(readInput()); //readInput() returns the JSON document as String
JSONArray jsonarr = json.getJSONArray("features");
json = jsonarr.getJSONObject(0);
json = json.getJSONObject("properties");
for(int i=0;i<=json.length;i++){
name.add(json.getString("KOMMUNNAMN"));
}

您的坐标实体被不必要地嵌套,并且读取效果不佳。 更改为

"coordinates": [
        {
            "latitude": 13.11196493557692,
            "longitude": 55.702721301997265
        },
        {
            "latitude": 13.112159474347964,
            "longitude": 55.69989518845077
        },
        {
            "latitude": 13.111027902960512,
            "longitude": 55.69899875723693
        }
    ]

读作“坐标包含位置对象数组”,这表示一个更好的JSON结构。

您现在应该使用以下代码解析坐标:

JSONObject json = new JSONObject(readInput()); //readInput() returns the JSON document as String
JSONArray jsonarr = json.getJSONArray("features");
json = jsonarr.getJSONObject(0);
json = json.getJSONObject("geometry");
jsonarr = json.getJSONArray("coordinates");

for(int i=0;i<jsonarr.length();i++){
    JSONObject location = jsonarr.getJSONObject(i);
    String latitude = location.getString("latitude");
    String longitude = location.getString("longitude");
}

另外,我不知道这是您的最终代码还是子集,但请确保您进行防御性分析。 检查数组的长度以及对象是否为null比抛出并处理JSONException更好。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM