【问题标题】:Extracting/parsing data returned as JSON from PHP从 PHP 中提取/解析以 JSON 形式返回的数据
【发布时间】:2013-03-08 18:36:36
【问题描述】:

我正在使用 TIdHTTP 从 PHP 调用中获取 JSON 数据。我期待使用 TJSONObject 但不知道如何为此目的使用它。 XE3 帮助中没有示例。

示例 JSON 数据

[{"fleet_id":"2","fleet":"EMB195"},{"fleet_id":"3","fleet":"EMB175"},{"fleet_id"‌:"1","fleet":"DHC84-400Q"}]

我敢肯定这很简单,但是怎么做!

谢谢。

【问题讨论】:

  • 这很 detailed article 可能会帮助您开始。
  • 干杯 - 有用的文章,但仍然无法弄清楚如何将“随机”json 数据分配给 TJSONObject
  • 你的意思是“任何”json数据,即任何类型?
  • 我知道我的期望,因为我负责从 PHP 发送它。所以可能是一对或一个数组等。测试数据是 [{"fleet_id":"2","fleet":"EMB195"},{"fleet_id":"3","fleet":"EMB175" },{"fleet_id":"1","fleet":"DHC84-400Q"}]
  • 你能说明你想用 TJSONObject 实现什么吗?

标签: json delphi delphi-xe3


【解决方案1】:

使用TJsonObject.ParseJsonValue将输入字符串转换为JSON值:

var
  val: TJsonValue;

s := '[{"fleet_id":"2","fleet":"EMB195"},{"fleet_id":"3","fleet":"EMB175"},{"fleet_id"‌:"1","fleet":"DHC84-400Q"}]';
val := TJsonObject.ParseJsonValue(s);

在这种情况下,JSON 恰好代表一个数组,因此您可以将其类型转换为:

var
  arr: TJsonArray;

arr := val as TJsonArray;

您可以使用Get 访问数组的元素,并将结果类型转换为TJsonObject

var
  i: Integer;
  elem: TJsonObject;

for i := 0 to Pred(arr.Size) do begin
  elem := arr.Get(i) as TJsonObject;
end;

要检查对象的属性,您可以使用Get 方法,该方法返回一个包含名称和值的TJsonPair

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    相关资源
    最近更新 更多