如何正确解析包含数组的JSON文档

时间:2017-02-11 15:56:27

标签: json delphi delphi-xe5

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;

1 个答案:

答案 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;