2013-03-08 108 views
0

我使用TIdHTTP从PHP调用中获取JSON数据。我期待使用TJSONObject,但无法解决如何将其用于此目的。 XE3帮助中没有例子。提取/解析从PHP返回的JSON数据

样品JSON数据

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

我敢肯定,这是简单的,但如何!

谢谢。

+0

这相当['详细文章]](http://www.sdn.nl/SDN/Artikelen/tabid/58/view/View/ArticleID/3230/Reading-and-Writing-JSON-with-Delphi。 aspx)可能会帮助你开始。 – TLama 2013-03-08 18:55:41

+0

欢呼声 - 有用的文章,但仍然不能解决如何分配'随机'json数据到TJSONObject – 2013-03-08 19:08:30

+0

你的意思是'任何'json数据,即任何类型? – 2013-03-08 19:36:58

回答

3

使用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持有的名称和值。

+0

罗布,工作一种享受!非常感谢。 – 2013-03-09 12:31:35