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
}
Это мой первый Expirience работы с JSON-документов. Я сделал это, как могу. Это работает. Но я думаю, что это было неправильно. Потому что в моей реализации отсутствует класс 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;
При переборе сокровенные массивов 'Get (1)' не возвращает 'TJSONString', он возвращает' TJSONNumber' вместо этого. Вы бы обнаружили эту ошибку, если использовали 'as' cast. И вы должны использовать 'TJSONArray.Items []' вместо 'TJSONArray.Get()'. И, конечно же, это класс ['TJSONPair'] (http://docwiki.embarcadero.com/Libraries/en/System.JSON.TJSONPair). –
Вы правы, 'Get (1)' return 'TJSONNumber', спасибо за подсказку. О 'TJSONArray.Items []', я могу ошибаться, но после того, как XE2 'Items' был заменен на' Get'. В XE5, который я использую, нет 'Item' в' TJSONArray'. – HeathRow
Вы правы. 'TJSONArray.Items' был добавлен в XE6, когда классы JSON были перенесены в новый блок' System.JSON'. "* Предупреждение:' Get' устарел. Используйте 'Items'. *" –