「TJSONObjectでJSONデータを解析する」をDelphi 10 Seattleで書き直します。
いくつかのメソッドがdeprecatedになっていたため、変更しています。
TJSONObjectを使用するには、「System.JSON」をusesに追加します。
uses System.JSON;
TJSONObject.ParseJSONValueでJSONデータを読み込みます。
const
Data: string = '{"name": "John Smith", "age": 33}';
var
JSONValue: TJSONValue;
JSONValue := TJSONObject.ParseJSONValue(Data);
JSONValueをTJSONObject型に変換します。
var
JSONObject: TJSONObject;
JSONObject := JSONValue as TJSONObject;
CountプロパティでJSONオブジェクトに格納されているペアの数を取得します。
var
Size: Integer;
Size := JSONObject.Count; // => 2
ペアを取得するにはPairsプロパティを使用します。
引数にはインデックスを指定します。
該当する要素がない時、Pairsプロパティはnilを返します。
var
JSONPair: TJSONPair;
JSONPair := JSONObject.Pairs[0];
TJSONPairオブジェクトのJsonStringプロパティでJSONペアの名前部分を、JsonValueプロパティでJSON ペアの値部分を取得します。
var
S, V: string;
S := JSONPair.JsonString.Value; // => name
V := JSONPair.JSONValue.Value; // => John Smith
文字列型以外のときはデータ型にあわせてキャストします。
数値型の時はTJSONNumberを使用します。
var
SC, VC: string;
NC: TJSONNumber;
Num: Integer;
JSONPair := JSONObject.Pairs[1];
SC := JSONPair.JsonString.ClassName; // => TJSONString
VC := JSONPair.JsonValue.ClassName; // => TJSONNumber
V := JSONPair.JsonValue.Value; // => 33
NC := JSONPair.JsonValue as TJSONNumber;
Num := NC.AsInt; // => 33
配列型の時はTJSONArrayを使用します。
const
Data: string = '{"index": 1, "items": ["item 1", "item 2", "item 3"]}';
var
JSONValue: TJSONValue;
JSONObject: TJSONObject;
JSONPair: TJSONPair;
JSONArray: TJSONArray;
S: string;
Size, I: Integer;
begin
JSONValue := TJSONObject.ParseJSONValue(Data);
JSONObject := JSONValue as TJSONObject;
JSONPair := JSONObject.Pairs[1];
S := JSONPair.JsonString.Value; // => items
JSONArray := JSONPair.JSONValue as TJSONArray;
Size := JSONArray.Count; // => 3
for I := 0 to Size - 1 do
begin
JSONValue := JSONArray.Items[I];
S := JSONValue.Value;
end;
// for-inにも対応している
for JSONValue in JSONArray do
begin
S := JSONValue.Value;
end;
真偽値のときはTJSONTrueかTJSONFalseになります。
const
Data: string = '[true, false]';
var
JSONValue: TJSONValue;
JSONArray: TJSONArray;
I: Integer;
begin
JSONValue := TJSONObject.ParseJSONValue(Data);
JSONArray := JSONValue as TJSONArray;
for I := 0 to JSONArray.Count - 1 do
begin
JSONValue := JSONArray.Items[I];
if JsonValue is TJSONTrue then
// Trueのとき
WriteLn('True');
if JsonValue is TJSONFalse then
// Falseのとき
WriteLn('False');
end;