我正在尝试使用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'
的问题吗?
答案 0 :(得分:2)
locations
是一个对象数组,但您没有像其他数组那样索引其中的对象。尝试以下方法:
rstResponse.RootElement := 'responses[0].annotations[0].locations[0].latLng';`