导航JSON路径

时间:2019-04-22 23:27:56

标签: json delphi

我正在尝试使用TRestResponse解析JSON响应。不幸的是,我对JSON的了解让我失望。

例如,给定以下JSON:

{
    "responses": [
        {
            "annotations": [
                {
                    "description": "Eiffel Tower",
                    "score": 0.714323,
                    "boundingVals": {
                        "vertices": [
                            {
                                "x": 213,
                                "y": 813
                            },
                            {
                                "x": 332,
                                "y": 813
                            },
                            {
                                "x": 332,
                                "y": 2183
                            },
                            {
                                "x": 213,
                                "y": 2183
                            }
                        ]
                    },
                    "locations": [
                        {
                            "latLng": {
                                "latitude": 48.858461,
                                "longitude": 2.294351
                            }
                        }
                    ]
                }
            ]
    ]
}

我可以使用以下方法检索第一个x值:

rstResponse.RootElement := 'responses[0].annotations[0].boundingVals.vertices';
x := VarToStr(MemTable.FieldValues['x']).ToInteger;

但是我无法使用以下方法检索纬度:

rstResponse.RootElement := 'responses[0].annotations[0].locations.latLng';
lat  := VarToStr(FDMemTable.FieldValues['latitude']);

第一行返回错误:

  

响应根元素“ responses [0] .annotations [0] .locations.latLng”不是响应JSON的有效路径

我可以使用:

rstResponse.RootElement := 'responses[0].annotations[0].locations';
s := VarToStr(FDMemTable.FieldValues['latLng']);

但是s显然是{ "latitude": 48.858461, "longitude": 2.294351 },我需要自己分析一下。

您能指出'responses[0].annotations[0].locations.latLng'的问题吗?

1 个答案:

答案 0 :(得分:2)

locations是一个对象数组,但您没有像其他数组那样索引其中的对象。尝试以下方法:

rstResponse.RootElement := 'responses[0].annotations[0].locations[0].latLng';`