以下のようなJSONデータがあり
{
"ReturnCode":0,
"ReturnMsg":"処理は正常に終了しました。",
"Result":[
{
"KihonInfo":{
"KjnCode":"0000002"
},
"NencyoInfo":{
"StatusId":"3"
}
},
{
"KihonInfo":{
"KjnCode":"0000003"
},
"NencyoInfo":{
"StatusId":"2"
}
},
{
"KihonInfo":{
"KjnCode":"1"
},
"NencyoInfo":{
"StatusId":"3"
}
},
null
]
}
以下のようなプログラムで読み込ませようとすると
procedure TForm1.Button1Click(Sender: TObject);
type
TKihonInfo = record
KjnCode : String;
end;
TNencyoInfo = record
StatusId : String;
end;
TResult = record
KihonInfo : TArray<TKihonInfo>;
NencyoInfo : TArray<TNencyoInfo>;
end;
TRoot = record
ReturnCode : Integer;
ReturnMsg : String;
Result : TResult;
end;
var
jsWork : TJsonSerializer;
Root : TRoot;
strJson : String;
begin
strJson := '上記JSONデータ';
jsWork := TJsonSerializer.Create;
try
Root := jsWork.Deserialize<TRoot>(strJson);
finally
jsWork.DisposeOf;
end;
end;
Root := jsWork.Deserialize<TRoot>(strJson);
のところで
「JSON配列の読み取り中に予期しない型がみつかりました」
のエラーとなります。
構造体の定義が不正かと思い色々試していますが解消できません。
どこがまずいでしょうか?
とりあえず、動いたのが以下ですね。
uses System.JSON.Serializers;
procedure TForm1.Button1Click(Sender: TObject);
type
TKihonInfo=Record
KjnCode:String;
end;
TNenchoInfo=Record
StatusId:String;
end;
TResult=Record
KihonInfo:TKihonInfo;
NencyoInfo:TNenchoInfo;
end;
TRoot=record
ReturnCode:Integer;
ReturnMsg:String;
Result:Array of TResult;
end;
var st:string;
js:TJsonSerializer;
root:TRoot;
begin
st:='{'+
'"ReturnCode":0,'+
'"ReturnMsg":"処理は正常に終了しました。",'+
'"Result":['+
' {'+
' "KihonInfo":{"KjnCode":"0000002"},'+
' "NencyoInfo":{"StatusId":"3"}'+
' },'+
' {'+
' "KihonInfo":{"KjnCode":"0000003"},'+
' "NencyoInfo":{"StatusId":"2"}'+
' },'+
' null'+
']'+
'}';
js:=TJsonSerializer.Create;
root:=js.Deserialize<TRoot>(st);
end;
はずしていたらすいません。
mam様
ご教示のコードを参考に
var kc := Root.Result[0].KihonInfo.KjnCode;
にてデータの取得もできました。
ありがとうございました。
良かったです。
js.Free
を忘れてました。すいません。
ツイート | ![]() |