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文档。我尽我所能。这行得通。但我认为这是错误的方式。因为在我的实现中缺少TJSONPair类,不像net中的许多例子。在我的案例中是否还有其他包含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;
答案 0 :(得分:0)
我建议你放弃内置的JSON类,而是使用Henry Gourvest的优秀SuperObject类。他们已经存在更长时间,经过更好的测试,更强大,更易于使用。
有了这些,你的代码就会变成:
procedure ParseJSON(const JSONString: string);
const ArrString: array of string = ['asks', 'bids'];
var JSON, Element: ISuperObject;
CurrentString: string;
begin
JSON := SO(JSONString);
for CurrentString in ArrString do
begin
Memo1.Lines.Add(CurrentString + ':');
for Element in JSON[CurrentString] do
Memo1.Lines.Add(Element.AsArray.S[0] + ' ' + Element.AsArray.D[1].ToString);
end;
end;