ApexでJSONをパースする
Apex RestAPIなんかを作成している際に、インプットをJSONにしたい場合があります。
その際に受け取ったJSONをApexでパースして使用する方法がややこしかったのでメモ。
基本
基本としては、以下の記事が詳しいです。
Winter’12のJSONサポートを使いこなす(2) | チームスピリット
ここにもある通り、例えば、{a:xx, b:xxx}
などのJSONがある場合は、予めapex側でそのJSONの内容専用のクラスを用意してやる必要がある、とのこと。
何もなしでいきなりパースしていくことが出来ない。
そのためにクラスを用意してオブジェクトにして……が非常にめんどくさい。
変換ツール
そんなめんどくさいJSONのクラス作成を一発で変換してくれるwebツールが以下。
例の通り、例えば以下の様なJSONを入力してapexを作成すると、以下のようなコードが生成される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
そしてなんと一緒にテストコードまで出力してくれる。
1 2 3 4 5 6 7 8 9 |
|
これをコピペするなりしてapexクラスとして作成すればOK。
配列のJSON
以下の様な配列になっているJSONをパースしたい場合。
1 2 3 4 5 6 7 8 9 |
|
これも上記ツールにかけると以下の様なクラスが生成される。
(テストクラスは割愛)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
これを利用してuserid
を順番に取得したい場合は以下のようにすればいい。
(json_strには上記のJSONが入っているものとする)
1 2 3 4 |
|
まとめ
いちいちJSONの内容に合わせてクラスを作成しないといけないのは非常にめんどくさい。
JSON.deserialize
の他にも、JSON.createParser()
もあるが、これも同じくクラスの作成は必要。
型が厳密なだけにいちいち指定が必要になるのかもしれない。
参考
apex – JSON.deserialize Array of Objects – Salesforce Stack Exchange
JSONParser Class | Force.com Apex Code Developer's Guide | Salesforce Developers