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 となります。