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'。*」 –