7

DelphiでJSONを理解しようとしています。モジュール「DBXJSON.pas」を使用します。これをこのような配列にするために使用する方法:

Array:[
        {"1":1_1,"1_2_1":1_2_2},
        ...,
   ]

そうする:

JSONObject:=TJSONObject.Create;
JSONArray:=TJSONArray.Create();
...
JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1','1_1')));
JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1_2_1','1_2_2')));
JSONObject.AddPair('Array',JSONArray);

、しかしこれを入手してください:

{
"Array":[
{"1":"1_1"},{"1_2_1":"1_2_2"}
]
}

助けてください!ありがとう!

4

2 に答える 2

10

上記で投稿したコードは正しくありません。JSON配列を作成し、その配列にペア要素を追加しようとしています。ただし、配列にペアを追加する代わりに、JSON Objectsこの配列に追加する必要があり、これらのオブジェクトにはペアが含まれている必要があります。
問題を解決するためのサンプルコードは次のとおりです。

program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils, dbxjson;

var jsobj, jso : TJsonObject;
    jsa : TJsonArray;
    jsp : TJsonPair;
begin
  try
    //create top-level object
    jsObj := TJsonObject.Create();
    //create an json-array
    jsa := TJsonArray.Create();
    //add array to object
    jsp := TJSONPair.Create('Array', jsa);
    jsObj.AddPair(jsp);

    //add items to the _first_ elemet of array
    jso := TJsonObject.Create();
    //add object pairs
    jso.AddPair(TJsonPair.Create('1', '1_1'));
    jso.AddPair(TJsonPair.Create('1_2_1', '1_2_2'));
    //put it into array
    jsa.AddElement(jso);

    //second element
    jso := TJsonObject.Create();
    //add object pairs
    jso.AddPair(TJsonPair.Create('x', 'x_x'));
    jso.AddPair(TJsonPair.Create('x_y_x', 'x_y_y'));
    //put it into array
    jsa.AddElement(jso);

    writeln(jsObj.ToString);
    readln;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

出力は

{"Array":[
     {"1":"1_1","1_2_1":"1_2_2"},
     {"x":"x_x","x_y_x":"x_y_y"}
  ]
}
于 2012-05-11T12:40:00.300 に答える
0

@teranと同じ答え:

変化する:

JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1','1_1')));
JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1_2_1','1_2_2')));

に:

JSONArray.AddElement(TJSONPair.Create('1','1_1'));
JSONArray.AddElement(TJSONPair.Create('1_2_1','1_2_2'));

乾杯。

于 2012-05-11T14:40:03.593 に答える