0
JSON-文件:如何正确解析以下JSON文件包括阵列
{"asks":
[["0.01129999",0.9997237],["0.01130000",594.26412711],["0.01130826",0.23004724],["0.01130999",0.25231793]],
"bids":
[["0.01129800",174.30861783],["0.01128867",0.13287659],["0.01128817",0.0097447],["0.01127559",241.94881004]],
"isFrozen":"0","seq":254407265
}
这是我用JSON的文档工作第一的expirience。我尽我所能。这行得通。但我认为这是错误的方式。因为在我的实现中缺少TJSONPair类,不像网上的很多例子。包含TJSONPair的实现有其他变体吗?
const
ArrString : array[0..1] of String = ('asks','bids');
var
JSONObject: TJSONObject;
JSONArray: TJSONArray;
i,j: integer;
...
JSONObject:=TJSONObject.ParseJSONValue(JSONString) as TJSONObject;
if Assigned(JSONObject) then
begin
for i := 0 to High(ArrString) do
begin
JSONArray := JSONObject.Get(ArrString[i]).JsonValue as TJSONArray;
for j := 0 to JSONArray.Size-1 do
begin
if j = 0 then Memo1.Lines.Add(ArrString[i]+':');
Memo1.Lines.Add(TJSONString(TJSONArray(JSONArray.Get(j)).Get(0)).Value+ ' ' +TJSONNumber(TJSONArray(JSONArray.Get(j)).Get(1)).ToString);
end;
end;
当迭代最里面的阵列,'获取(1)'没有返回'TJSONString',它返回一个'TJSONNumber'代替。如果您使用过“铸造”,那么您会发现该错误。你应该使用'TJSONArray.Items []'而不是'TJSONArray.Get()'。而且肯定是['TJSONPair'](http://docwiki.embarcadero.com/Libraries/en/System.JSON.TJSONPair)类。 –
你说得对,'Get(1)'return'TJSONNumber',谢谢你的提示。关于'TJSONArray.Items []',我可能会被误解,但是在XE2后''Items'被替换为'Get'。在我使用的XE5的'TJSONArray'中没有'Item'。 – HeathRow
你是对的。当JSON类被移动到新的'System.JSON'单元时,在XE6中添加了'TJSONArray.Items'。 “*警告:'Get'已弃用,请使用'Items'。*” –