JSONParser クラス
名前空間
使用方法
System.JSONParser メソッドを使用して、Web サービスコールアウトの JSON 符号化方式の応答など、コールから外部サービスに返される JSON 形式の応答を解析します。
JSONParser のメソッド
JSONParser のメソッドは次のとおりです。すべてインスタンスメソッドです。
clearCurrentToken()
署名
public Void clearCurrentToken()
戻り値
型: Void
使用方法
このメソッドがコールされた後は、hasCurrentToken へのコールは false を返し、getCurrentToken へのコールは null を返します。getLastClearedToken をコールして、クリアされたトークンを取得できます。
getBlobValue()
署名
public Blob getBlobValue()
戻り値
型: Blob
使用方法
現在のトークンは JSONToken.VALUE_STRING 型で Base64 で符号化されている必要があります。
getBooleanValue()
署名
public Boolean getBooleanValue()
戻り値
型: Boolean
使用方法
現在のトークンは JSONToken.VALUE_TRUE 型または JSONToken.VALUE_FALSE 型である必要があります。
1String JSONContent =
2 '{"isActive":true}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the Boolean value.
10Boolean isActive = parser.getBooleanValue();getCurrentName()
署名
public String getCurrentName()
戻り値
型: String
使用方法
現在のトークンが JSONToken.FIELD_NAME 型の場合、getText と同じ値を返します。現在のトークンが値の場合、このトークンより前にある項目名を返します。配列値やルートレベル値など他の値の場合は null を返します。
次の例では、サンプルの JSON 文字列を解析します。項目値まで処理を進めて、対応する項目名を取得します。
例
1String JSONContent = '{"firstName":"John"}';
2JSONParser parser =
3 JSON.createParser(JSONContent);
4// Advance to the start object marker.
5parser.nextToken();
6// Advance to the next value.
7parser.nextValue();
8// Get the field name for the current value.
9String fieldName = parser.getCurrentName();
10// Get the textual representation
11// of the value.
12String fieldValue = parser.getText();getCurrentToken()
署名
public System.JSONToken getCurrentToken()
戻り値
使用方法
1String JSONContent = '{"firstName":"John"}';
2JSONParser parser =
3 JSON.createParser(JSONContent);
4// Advance to the next token.
5while (parser.nextToken() != null) {
6 System.debug('Current token: ' +
7 parser.getCurrentToken());
8}getDatetimeValue()
署名
public Datetime getDatetimeValue()
戻り値
型: Datetime
使用方法
現在のトークンは JSONToken.VALUE_STRING 型である必要があり、ISO-8601 形式の Datetime 値を表す必要があります。
1String JSONContent =
2'{"transactionDate":"2011-03-22T13:01:23"}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the transaction date.
10Datetime transactionDate =
11 parser.getDatetimeValue();getDateValue()
署名
public Date getDateValue()
戻り値
型: Date
使用方法
現在のトークンは JSONToken.VALUE_STRING 型である必要があり、ISO-8601 形式の Date 値を表す必要があります。
1String JSONContent =
2 '{"dateOfBirth":"2011-03-22"}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the date of birth.
10Date dob = parser.getDateValue();getDecimalValue()
署名
public Decimal getDecimalValue()
戻り値
型: Decimal
使用方法
現在のトークンは JSONToken.VALUE_NUMBER_FLOAT 型または JSONToken.VALUE_NUMBER_INT 型である必要があり、Decimal 型の値に変換可能な数値です。
1String JSONContent =
2 '{"GPA":3.8}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the GPA score.
10Decimal gpa = parser.getDecimalValue();getDoubleValue()
署名
public Double getDoubleValue()
戻り値
型: Double
使用方法
現在のトークンは JSONToken.VALUE_NUMBER_FLOAT 型である必要があり、Double 型の値に変換可能な数値です。
1String JSONContent =
2 '{"GPA":3.8}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the GPA score.
10Double gpa = parser.getDoubleValue();getIdValue()
署名
public ID getIdValue()
戻り値
型: ID
使用方法
現在のトークンは JSONToken.VALUE_STRING 型で、有効な ID である必要があります。
1String JSONContent =
2 '{"recordId":"001R0000002nO6H"}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the record ID.
10ID recordID = parser.getIdValue();getIntegerValue()
署名
public Integer getIntegerValue()
戻り値
型: Integer
使用方法
現在のトークンは JSONToken.VALUE_NUMBER_INT 型で、Integer を表す必要があります。
1String JSONContent =
2 '{"recordCount":10}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the record count.
10Integer count = parser.getIntegerValue();getLastClearedToken()
署名
public System.JSONToken getLastClearedToken()
戻り値
getLongValue()
署名
public Long getLongValue()
戻り値
型: Long
使用方法
現在のトークンは JSONToken.VALUE_NUMBER_INT 型である必要があり、Long 型の値に変換可能な数値です。
1String JSONContent =
2 '{"recordCount":2097531021}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the record count.
10Long count = parser.getLongValue();getText()
署名
public String getText()
戻り値
型: String
使用方法
nextToken が一度もコールされていない場合、またはパーサーが入力ストリームの終了に達した場合は、現在のトークンは存在しないため null を返します。
getTimeValue()
署名
public Time getTimeValue()
戻り値
型: Time
使用方法
現在のトークンは JSONToken.VALUE_STRING 型である必要があり、ISO-8601 形式の Time 値を表す必要があります。
1String JSONContent =
2 '{"arrivalTime":"18:05"}';
3JSONParser parser =
4 JSON.createParser(JSONContent);
5// Advance to the start object marker.
6parser.nextToken();
7// Advance to the next value.
8parser.nextValue();
9// Get the arrival time.
10Time arrivalTime = parser.getTimeValue();hasCurrentToken()
署名
public Boolean hasCurrentToken()
戻り値
型: Boolean
nextToken()
署名
public System.JSONToken nextToken()
戻り値
使用方法
ストリームの処理を先に進めて、次のトークン (存在する場合) の型を特定します。
nextValue()
署名
public System.JSONToken nextValue()
戻り値
使用方法
ストリームの処理を先に進めて、JSON 配列、オブジェクトの開始マーク、終了マークなど、値の型を示す次のトークン (存在する場合) の型を特定します。
readValueAs(apexType)
署名
public Object readValueAs(System.Type apexType)
パラメーター
- apexType
- 型: System.Type
- apexType 引数は、このメソッドが現在の値をデシリアライズした後に返すオブジェクトの型を指定します。
戻り値
型: Object
使用方法
JSON コンテンツに、System.Type 引数に存在しない属性 (存在しない項目やオブジェクトなど) が含まれている場合、一定の状況でデシリアライゼーションに失敗します。Salesforce API バージョン 34.0 以前を使用して JSON コンテンツをカスタムオブジェクトまたは sObject にデシリアライズすると、無関係な属性が渡されたときにこのメソッドが実行時例外を発生させます。JSON コンテンツを API の全バージョンの Apex クラスまたは API バージョン 35.0 以降のオブジェクトにデシリアライズしたときは、例外が発生しません。例外が発生しない場合、このメソッドは無関係な属性を無視して、残りの JSON コンテンツを解析します。
例
1public class Person {
2 public String name;
3 public String phone;
4}1// JSON string that contains a Person object.
2String JSONContent =
3 '{"person":{' +
4 '"name":"John Smith",' +
5 '"phone":"555-1212"}}';
6JSONParser parser =
7 JSON.createParser(JSONContent);
8// Make calls to nextToken()
9// to point to the second
10// start object marker.
11parser.nextToken();
12parser.nextToken();
13parser.nextToken();
14// Retrieve the Person object
15// from the JSON string.
16Person obj =
17 (Person)parser.readValueAs(
18 Person.class);
19System.assertEquals(
20 obj.name, 'John Smith');
21System.assertEquals(
22 obj.phone, '555-1212');readValueAsStrict(apexType)
署名
public Object readValueAsStrict(System.Type apexType)
パラメーター
- apexType
- 型: System.Type
- apexType 引数は、このメソッドが現在の値をデシリアライズした後に返すオブジェクトの型を指定します。
戻り値
型: Object
使用方法
JSON コンテンツに、System.Type 引数に存在しない属性 (存在しない項目やオブジェクトなど) が含まれている場合、一定の状況でデシリアライゼーションに失敗します。無関係な属性のある JSON コンテンツを Apex クラスにデシリアライズすると、API のどのバージョンでもこのメソッドが例外を発生させます。ただし、このメソッドを使用して JSON コンテンツをカスタムオブジェクトまたは sObject にデシリアライズする場合は、例外が発生しません。
1public class Person {
2 public String name;
3 public String phone;
4}1// JSON string that contains a Person object.
2String JSONContent =
3 '{"person":{' +
4 '"name":"John Smith",' +
5 '"phone":"555-1212"}}';
6JSONParser parser =
7 JSON.createParser(JSONContent);
8// Make calls to nextToken()
9// to point to the second
10// start object marker.
11parser.nextToken();
12parser.nextToken();
13parser.nextToken();
14// Retrieve the Person object
15// from the JSON string.
16Person obj =
17 (Person)parser.readValueAsStrict(
18 Person.class);
19System.assertEquals(
20 obj.name, 'John Smith');
21System.assertEquals(
22 obj.phone, '555-1212');