2017-05-11 11 views
0

は私がjsonデータをapex salesforceに取得するにはどうすればいいですか?

{ 
    "offset": 0, 
    "limit": 50, 
    "objects": [ 
    { 
     "id": "59118fb6e4b0168ec4b56692", 
     "modifiedDate": 1494323126886, 
     "requestedIds": null, 
     "mergedIds": [], 
     "properties": { 
     "name": [ 
      { 
      "value": "Abhimanyu", 
      "metadata": {} 
      } 
     ], 
     "company": [], 
     "title": [], 
     "email": [ 
      { 
      "value": "[email protected]", 
      "metadata": {} 
      } 
     ] 
     }, 
     "state": "ACTIVE" 
    }, 
    { 
     "id": "590d5813e4b03a8336fa1642", 
     "modifiedDate": 1494046739619, 
     "requestedIds": null, 
     "mergedIds": [], 
     "properties": { 
     "name": [ 
      { 
      "value": "Tim Archer", 
      "metadata": {} 
      } 
     ], 
     "company": [], 
     "title": [], 
     "email": [ 
      { 
      "value": "[email protected]", 
      "metadata": {} 
      } 
     ] 
     }, 
     "state": "ACTIVE" 
    } 
    ], 
    "size": 2 
} 

を呼び出して、私は、HTTPの応答に取得しています。このようなJSONを、持っていると私は、この次のコードを経由して、JSONからオブジェクトを取得することができています:私は必要なもの

String s = res.getBody(); 
    Map<String,Object> jsonMap = (Map<String, Object>)JSON.deserializeUntyped(s); 
    String jsonSubset = JSON.serialize(jsonMap.get('objects')); 

変数の名前と電子メールの値です。 これで私を助けてください!

答えて

0

これは面倒な作業ですが、すべてのデータを適切なWrapperクラスに分類すると、それはかなり簡単で維持しやすくなります。

まず、MainWrapperクラスを定義します。これには、自分のレベルでのすべてが含まれます。オブジェクトにキーペアがある場合は、それを必ずList<>として含める必要があります。

public class MainWrapper { 
    Integer offset; // Singleton variable 
    Integer limits; // Singleton variable 
    List<ObjectsWrapper> objects; // Collection variable since it starts with [], 
    Integer size; // Singleton variable 
} 

私はMainWrapperListとして、それを含めた理由だJSONでobjectsのおきた配列ので:だからこれはあなたのMainWrapperはどうあるべきかです。今度はObjectsWrapperを定義します。以下は同じもののために定義されたラッパーです。唯一それが非コレクション型だ理由ですobjectsに関連付けられているpropertiesにありますので

public class ObjectsWrapper { 
    String id; 
    String modifieddate; 
    String requestedIds; 
    PropertyWrapper properties; 
} 

。以下はpropertiesの表現です。

public class PropertyWrapper { 
    List<NameWrapper> name; 
    List<String> company; 
    List<String> title; 
    List<EmailWrapper> email; 
    String state; 
} 

public class NameWrapper { 
    String name; 
    String metadata; 
} 

これでJSONのデータをさまざまなラッパークラスに整理する方法が分かりました。これで作業が完了したら、JSONを逆シリアル化してMainWrapperクラスにしてアクセスしてください。たとえば :

MainWrapper mainJSONWrapper = (MainWrapper) JSON.deserialize(JSON,MainWrapper.class); 
List<ObjectsWrapper> objectsLst = mainJSONWrapper.objects; 
for(ObjectsWrapper obj:objectsLst) { 
    List<NameWrapper> lstNameWrapper = obj.properties; 
    for(NameWrapper nameObj:NameWrapper) { 
     System.debug('Name:'+nameObj.name); 
     System.debug('metadata:'+nameObj.metadata); 
    } 
} 

上記のコードは、テストされていませんが、はい、それはあなたが適切な方法でJSONをデシリアライズする方法のアイデアを与えるだろう。

はまた、ちょっと@Rohit Mourya ...この答えて答えてくれてありがとうをHow to deserialize a JSON String to Apex

+0

を行きます。私はあなたのコードを適用しました。このエラーが発生します。System.JSONException:期待されるリストが見つかりました。{ –

+0

'PropertyWrapperプロパティ;を' List プロパティ;に置き換えてみてください。 –

+0

私はすでに –

関連する問題