如何正确解析以下包含数组的 JSON 文档
How correct to parse following JSON document including array
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-文档工作。我已经尽力了。这行得通。但我认为这是错误的方式。因为在我的实现中缺少 TJSONPairclass,不像 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;
我建议您放弃内置的 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;
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-文档工作。我已经尽力了。这行得通。但我认为这是错误的方式。因为在我的实现中缺少 TJSONPairclass,不像 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;
我建议您放弃内置的 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;