如何将json数据导入顶级salesforce?

时间:2017-05-11 06:30:41

标签: json apex

我有一个这样的json,我在http call

的响应中得到了
{
  "offset": 0,
  "limit": 50,
  "objects": [
    {
      "id": "59118fb6e4b0168ec4b56692",
      "modifiedDate": 1494323126886,
      "requestedIds": null,
      "mergedIds": [],
      "properties": {
        "name": [
          {
            "value": "Abhimanyu",
            "metadata": {}
          }
        ],
        "company": [],
        "title": [],
        "email": [
          {
            "value": "absinghrathore127@gmail.com",
            "metadata": {}
          }
        ]
      },
      "state": "ACTIVE"
    },
    {
      "id": "590d5813e4b03a8336fa1642",
      "modifiedDate": 1494046739619,
      "requestedIds": null,
      "mergedIds": [],
      "properties": {
        "name": [
          {
            "value": "Tim Archer",
            "metadata": {}
          }
        ],
        "company": [],
        "title": [],
        "email": [
          {
            "value": "tim@avocado.com",
            "metadata": {}
          }
        ]
      },
      "state": "ACTIVE"
    }
  ],
  "size": 2
}

我可以通过以下代码从json获取对象:

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

我需要的是一些变量中名称和电子邮件的价值。 请帮帮我!!

1 个答案:

答案 0 :(得分:0)

这将是一项繁琐的工作,但是一旦您将所有数据分类到适当的Wrapper课程中,它就会非常简单易用。

首先要定义你的MainWrapper课程。这将包含其自身的所有级别。如果它有任何对象作为密钥对,那么我们需要确保将其包含为List<>。这就是你的MainWrapper应该是这样的:

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

由于您在JSON中有objects数组,因此我将其作为List MainWrapper包含在ObjectsWrapper中。现在是时候定义public class ObjectsWrapper { String id; String modifieddate; String requestedIds; PropertyWrapper properties; } 了。下面是相同的包装器。

properties

由于objects只与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; } 的表示。

MainWrapper

我想你现在对如何将JSON数据组织到各种包装类中有了一个很好的想法。完成此操作后,只需将JSON反序列化为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); } } 类并进行访问即可。 例如:

ProtectedData

上面的代码没有经过测试,但是,它会让你知道如何以适当的方式反序列化JSON。

也请仔细阅读此答案。How to deserialize a JSON String to Apex