Delphi Livebinding JSON对象和数组

Delphi Livebinding JSON对象和数组,delphi,firemonkey,delphi-xe5,livebindings,firemonkey-fm3,Delphi,Firemonkey,Delphi Xe5,Livebindings,Firemonkey Fm3,大家晚上好 我目前正在努力掌握Delphi中的livebindings,因为我想刷新我当前的一个项目,从基础上完成返工,以推动到其他平台,优化性能并最小化代码。我正在使用一个返回JSON数据的web API。一个示例调用返回的JSON格式如下所示 { "response": { "ips": [ { "ip": "111.222.333.444", "classification": "regular", "hits": 1

大家晚上好

我目前正在努力掌握Delphi中的livebindings,因为我想刷新我当前的一个项目,从基础上完成返工,以推动到其他平台,优化性能并最小化代码。我正在使用一个返回JSON数据的web API。一个示例调用返回的JSON格式如下所示

{
  "response": {
    "ips": [
      {
        "ip": "111.222.333.444",
        "classification": "regular",
        "hits": 134,
        "latitude": 0.0000,
        "longitude": 0.0000,
        "zone_name": "example.com"
      },
      {
        "ip": "555.666.777.888",
        "classification": "regular",
        "hits": 134,
        "latitude": 50.0000,
        "longitude: 50.0000,
        "zone_name": "example-2.com"
      },
    ]
},
"result": "success",
"msg": null
}
如您所见,它是一个JSON对象,包含一个数组和一些不同类型的数据字段string、float、integer等

在我的应用程序中,我有TRESTClient、TRESTRequest、TRESTResponse、trestresponseStateApter、TClientDataSet和TBindSourceDB组件。我还有一个TButton、一个TMemo和一个TListView。我已经设法通过LiveBinding将所有组件连接起来,当我单击执行请求的按钮时,调用返回的所有数据都显示在备忘录中

我正在努力将数据链接到ListView。我已经为TClientDataSource创建了FieldDefs,这是与ChildDefs相关的文字树视图

|-结果类型:ftString |-响应类型:ftObject |-|-ips类型:ftArray,尺寸:6 |-|-|-ip类型:ftString |-|-|-分类类型:ftString |-|-|-点击类型:ftInteger |-|-|-纬度类型:ftFloat |-|-|-经度类型:ftFloat |-|-|-区域名称类型:ftString 然后,我将LiveBind/LiveBindSourceDB1的response.ips[0]添加到TListView的Item.Text字段。不幸的是,当我运行应用程序并执行请求时,我得到了一个错误

ClientDataSet1: Field 'response.ips[0]' not found
在本例中,我试图检索数组中每个项的response.ips[index].ip字段,并将其作为TListView中的单个项输出。不幸的是,即使没有索引的response.ips字段也会出现类似的错误。但是,如果我将其链接到结果字段,那么它将按预期在listview中返回“success”消息

我确实看了一下,这使我达到了目前的观点,但如何使其适应我自己的数据证明有点挑战性。我注意到TrestresponseStatadapter也有它自己的FieldDefs属性,所以我不确定是否应该在那里定义我的字段

我想我只是把数据类型设置得不正确或者遗漏了一些小的东西,但是我希望能得到任何帮助。

我找到了答案

设置REST组件 对于TrestresponseStateApter,将其RootElement属性设置为response.ips 然后,添加字段ip、分类、点击次数、纬度、经度和区域名称,作为其FieldDefs 右键单击树响应选项卡并选择“更新数据集” 将TresResponseStateStataTapter中的一个字段绑定到TListView的item.text属性 然后,应用程序正常工作并正确反映数据