Delphi 10 Seattleを使ってTJSONObjectでJSONデータを解析する

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;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です