解析来自HTTP API调用的深度嵌套对象,使用Java。

huangapple go评论95阅读模式
英文:

Parsing deeply nested object from HTTP API call with Java

问题

我正在调用新加坡政府的公共“taxi-availability”API,试图获取“coordinates”数组的值,该数组是一个对象列表。然而,我在解析响应时遇到了困难,因为它是一个深度嵌套的对象,我不想为其定义一个单独的数据类。

响应数据模型(未显示所有键):

{
    features: [
        {
            geometry: {
                coordinates: [
                    {

                    }
                ]
            }
        }
    ]
}

获取响应的代码:

String uri = "https://api.data.gov.sg/v1/transport/taxi-availability";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

将响应从字符串转换为对象的代码:

JSONObject obj = new JSONObject(result);

尝试查询“coordinates”的错误尝试:

obj.getJSONArray("features").get(0).getJSONObject("geometry").getJSONArray("coordinates").toString();

警告:“The method getJSONObject(String) is undefined for type object”在“.get(0).getJSONObject("geometry")”处。

请告诉我如何查询对象的“coordinates”数组。我愿意使用不同的库。

英文:

I am calling the Singapore government's public taxi-availability API and am trying to get the value of the coordinates array which is a list of objects. However, I am having difficulty parsing the response as it is a deeply nested object and I do not want to define a separate data class for it

Response data model (not all keys are shown):

{
    features: [
        {
            geometry: {
                coordinates: [
                    {

                    }
                ]
            }
        }
    ]
}

Code to get the response:

String uri = "https://api.data.gov.sg/v1/transport/taxi-availability";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);

Code to convert the response from string to an object:

JSONObject obj = new JSONObject(result);

Faulty attempt to query for coordinates:

obj.getJSONArray("features").get(0).getJSONObject("geometry").getJSONArray("coordinates").toString();

Warning: The method getJSONObject(String) is undefined for type object at .get(0).getJSONObject("geometry")

Please advise on how I can query for the coordinates array of objects. I'm willing to use different libraries

答案1

得分: 1

以下是翻译好的内容:

使用此结果示例

{
    "type": "FeatureCollection",
    "crs": {"type": "link", "properties": {"href": "http://spatialreference.org/ref/epsg/4326/ogcwkt/", "type": "ogcwkt"}},
    "features": [{"type": "Feature", "geometry": {"type": "MultiPoint", "coordinates": [[103.62835, 1.29337], [103.63217, 1.31944] ......]
}

您可以通过以下方式循环遍历结果并使用JSONArrays和JSONObjects提取坐标

JSONObject resultObject = new JSONObject(result);

JSONArray featuresArray = resultObject.getJSONArray("features");
System.out.println("\nfeaturesArray = " + featuresArray);
//[{"geometry":{"coordinates":[[103.62382,1.28178],[103.6265,1.29515],

for (int f = 0; f < featuresArray.length(); f++) {

    JSONObject featuresObj = featuresArray.getJSONObject(f);
    System.out.println("\nfeaturesObj = " + featuresObj);
    //{"geometry":{"coordinates":[[103.62803,1.28839],[103.62911,1.29983],

    JSONObject geometryObj = featuresObj.getJSONObject("geometry");
    System.out.println("\ngeometryObj = " + geometryObj);
    //{"coordinates":[[103.62711,1.30928],[103.62718,1.29478]

    JSONArray coordsArray = geometryObj.getJSONArray("coordinates");
    System.out.println("\ncoordsArray = " + coordsArray);
    //[[103.61466,1.25029],[103.61822,1.27588],

    for (int c = 0; c < coordsArray.length(); c++) {
        System.out.println("Coord = " + coordsArray.get(c));
        //Coord = [103.62387,1.28607]
        //Coord = [103.62649,1.29515]
    }
}

希望这对您有所帮助。

英文:

With this result sample

   {
&quot;type&quot;:&quot;FeatureCollection&quot;,
&quot;crs&quot;:{&quot;type&quot;:&quot;link&quot;,&quot;properties&quot;:{&quot;href&quot;:&quot;http://spatialreference.org/ref/epsg/4326/ogcwkt/&quot;,&quot;type&quot;:&quot;ogcwkt&quot;},
&quot;features&quot;:[{&quot;type&quot;:&quot;Feature&quot;,&quot;geometry&quot;:{&quot;type&quot;:&quot;MultiPoint&quot;,&quot;coordinates&quot;:[[103.62835,1.29337],[103.63217,1.31944]
......

you can loop through result and extract coordinates using JSONArrays & JSONObjects as below

JSONObject resultObject = new JSONObject(result);
JSONArray featuresArray = resultObject.getJSONArray(&quot;features&quot;);
System.out.println(&quot;\nfeaturesArray = &quot; + featuresArray);
//[{&quot;geometry&quot;:{&quot;coordinates&quot;:[[103.62382,1.28178],[103.6265,1.29515],
for (int f = 0; f &lt; featuresArray.length(); f++) {
JSONObject featuresObj = featuresArray.getJSONObject(f);
System.out.println(&quot;\nfeaturesObj = &quot; + featuresObj);
//{&quot;geometry&quot;:{&quot;coordinates&quot;:[[103.62803,1.28839],[103.62911,1.29983],
JSONObject geometryObj = featuresObj.getJSONObject(&quot;geometry&quot;);
System.out.println(&quot;\ngeometryObj = &quot; + geometryObj);
//{&quot;coordinates&quot;:[[103.62711,1.30928],[103.62718,1.29478]
JSONArray coordsArray = geometryObj.getJSONArray(&quot;coordinates&quot;);
System.out.println(&quot;\ncoordsArray = &quot; + coordsArray);
//[[103.61466,1.25029],[103.61822,1.27588],
for (int c = 0; c &lt; coordsArray.length(); c++) {
System.out.println(&quot;Coord = &quot; + coordsArray.get(c));
//Coord = [103.62387,1.28607]
//Coord = [103.62649,1.29515]
}
}

huangapple
  • 本文由 发表于 2023年8月10日 10:56:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/76872384.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定