Delphi从json对象访问数据

Leo*_*idi -2 delphi json

我需要编写一些代码来从应用程序将从网站接收的 JSON 字符串中检索数据。

这是 JSON 字符串。

{
  "client" :
     {
      "Name" : "john doe",
      "Phone" : 12345678,
      "Address": "5th av",
     },
  "order" : [
     {
      "Code" : 101,
      "Quantity" : 1,
      "Cost": 10.50,
      "Coment" : ""
     },
     {
      "Code" : 102,
      "Quantity" : 3,
      "Cost": 8.50,
      "Coment" : ""
     },
     {
      "Code" : 103,
      "Quantity" : 1,
      "Cost": 21.50,
      "Coment" : ""
     }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我对如何读取对和数组感到非常困惑。我已经尝试了这里和其他论坛上发布的大量代码,但仍然无法完成。

谁能给我一些提示来完成它?我正在使用 XE5 和 JSON 单元。

Rem*_*eau 5

我不会为您编写实际的代码,但我会给您一个提示。

以下是您所显示的 JSON 的结构:

目的
|
|_ 客户端(对象)
| |_ 名称(字符串)
| |_ 电话(字符串)
| |_ 地址(字符串)
|
|_ 顺序(数组)
  |_ [0](对象)
  | |_ 代码(数字)
  | |_ 数量(数量)
  | |_ 代码(数字)
  | |_ 评论(字符串)
  |
  |_ [1](对象)
  | |_ 代码(数字)
  | |_ 数量(数量)
  | |_ 代码(数字)
  | |_ 评论(字符串)
  |
  |_ [2](对象)
     |_ 代码(数字)
     |_ 数量(数量)
     |_ 代码(数字)
     |_ 评论(字符串)

您可以将其一对一映射到Data.DBXJSON单元中的 Delphi 原生 JSON 类(它们已移至System.JSONXE6 中的单元)。

  1. 首先将 JSON 字符串传递给TJSONObject.ParseJSONValue(),它返回一个TJSONValue. 将其类型转换为TJSONObject.
  2. 使用其Values属性来访问clientorder值。分别将它们类型转换为TJSONObjectTJSONArray
  3. 对于client对象,使用其Values属性来访问NamePhoneAddress值。您可以调用他们的Value()方法来获取它们的字符串值。
  4. 对于order数组,使用它的CountItems属性,或者它的GetEnumerator方法(间接在for..in循环中,迭代数组项。将每个项类型转换为 aTJSONObject以访问其Values属性。对于数字值,将它们类型转换为以TJSONNumber访问其属性) AsIntAsInt64、 和AsDouble所需的属性。

有关更多信息,请参阅 Embarcadero 的JSON 文档