JSONは、APIで最も広く使用されているデータ形式です。多くのAPIリクエストは、JSONレスポンスボディで情報を返します。JSONレスポンスボディからアサーションと変数を作成するには、JSONパスを記述する必要があります。JSONパスは、レスポンスから必要な特定の情報を抽出します。例えば、次のJSONパスはレスポンスボディからユーザーIDを抽出します。
JSONパスでIDを抽出する
JSONにあまり詳しくない場合や復習が必要な場合は、JSONの構造と構文についてさらに学ぶために読み進めてください。
JSONレスポンスボディの構造
JSONレスポンスボディは、オブジェクトと配列で構成されます。
JSONオブジェクト
JSONオブジェクトにはキーと値のペアで表現される1つ以上のプロパティが含まれており、プロパティ同士はコンマで区切られ、中括弧 { }
で囲まれています。
たとえば、ユーザーを認証するAPIコールは、ユーザーがログインしたことを示すために、以下のようなレスポンスボディを返す可能性があります。
{ "authenticated": true }
このJSONレスポンスには、キーが "authenticated"
、値がtrue
のプロパティ1つだけが含まれています。
オブジェクトはネストすることも可能です。この例では、APIから以下のようなユーザー詳細情報が返されます。
{ "data": { "id": 7, "email": "email@example.com", "first_name": "John", "last_name": "Smith", "image": "https://example.com/7/image.jpg" } }
キー "data"
はその値としてオブジェクトを持ち、そのオブジェクトは "id"
、"email"
、"first_name"
、"last_name"
、"image"
という5つのプロパティを持っています。これはネストしているオブジェクトです。
JSONの配列
JSONレスポンスボディには、配列を含めることもできます。配列は項目のリストであり、項目同士はコンマで区切られ、角括弧 [ ]
で囲まれています。以下は、その例です。
["apples", "bananas", "oranges", "grapes"]
オブジェクトには、値として配列を含めることもできます。この例では、キー "data" の値は、ジャンルの名前の配列です。
{ "statusCode": 200, "message": "Genres", "data": [ "comedy", "horror", "noir", "action", "drama", "rom-com", "art house" ] }
JSONレスポンスボディには、オブジェクトの配列 (つまりオブジェクトのリスト) を含めることもできます。この例の "records"
の値はオブジェクトの配列であり、データベース内の3人のユーザーを表しています。
{ "records": [ { "id": "rec25eKmUsfiieG2B", "createdTime": "2021-05-21T20:17:43.000Z", "username": "Jonny W" }, { "id": "rec2dLF92AG8JTL0S", "createdTime": "2021-03-20T18:02:38.000Z", "username": "Debbie" }, { "id": "rec5w5lUPzN8Yd3um", "createdTime": "2021-03-20T20:41:51.000Z", "username": "Louie" } ] }
JSONの値のタイプ
キーと値のペアの値は、次のいずれかのタイプが可能です。
- ブール値:
true
またはfalse
- 文字列: 引用符で囲まれた一連の文字。例:
"John"
- オブジェクト: ネストされたオブジェクトとも呼ばれ、固有の中括弧
{ }
で囲まれています。 - 数値: 多くの場合、ステータスや一意のIDを返すために使用されます。例:
200
- 配列: 角括弧
[ ]
で囲まれた項目のリスト
JSONパスの構文
APIテストでアサーションや変数に使用する値を特定するには、JSONパスを記述する必要があります。JSONパスは、キー、ドット記法、角括弧を使用して特定の値を識別します。
キー
JSONオブジェクトでは、キーを使用して特定の値にアクセスします。たとえば、下記のJSONレスポンスボディの値true
にアクセスするためのJSONパスは、キー "authenticated"
から引用符を除いたもの authenticated
となります。
{ "authenticated": true }
ドット記法
ネストされたオブジェクト内の値を抽出する必要がある場合は、JSONパスでドット記法のキーを使用します。下記のレスポンスでは、値 "email@example.com"
にアクセスするためのJSONパスは data.email
となります。
{ "data": { "id": 7, "email": "email@example.com", "first_name": "John", "last_name": "Smith", "image": "https://example.com/7/image.jpg" } }
角括弧
配列内の値にアクセスするには、角括弧と、特定の要素を示す数字を使用します。たとえば、ジャンル "comedy"
にアクセスするためのJSONパスでは、キー data
の後に [0]
を続けたもの data[0]
を使用して、配列内の最初の項目を指定します。
{ "statusCode": 200, "message": "Genres", "data": [ "comedy", "horror", "noir", "action", "drama", "rom-com", "art house" ] }
配列内の順番は0から数える
配列内の要素は0から数えます。配列内の最初の項目のインデックスは0番目です。
オブジェクト配列内のオブジェクトにアクセスする場合、キーと角括弧およびドット記法を組み合わせて適切な値を取得します。
たとえば、3番目のユーザーの一意のIDにアクセスするためのJSONパスは records[2].id
となります。
{ "records": [ { "id": "rec25eKmUsfiieG2B", "createdTime": "2021-05-21T20:17:43.000Z", "username": "Jonny W" }, { "id": "rec2dLF92AG8JTL0S", "createdTime": "2021-03-20T18:02:38.000Z", "username": "Debbie" }, { "id": "rec5w5lUPzN8Yd3um", "createdTime": "2021-03-20T20:41:51.000Z", "username": "Louie" } ] }
別の例で、「戦争と平和」の翻訳者の姓である "Briggs" という値にアクセスするためのJSONパスは、results[0].translator.lastname
となります。