如何将json数据导入apex salesforce?

问题描述 投票:0回答:1

我有一个像这样的 json,我从 http 调用的响应中得到它

{
  "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
}

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

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

我需要的是某个变量中的姓名和电子邮件的值。 请帮我解决这个问题!

json apex
1个回答
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;
}

我想现在您已经清楚如何将 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。

另请浏览此答案..如何将 JSON 字符串反序列化为 Apex

© www.soinside.com 2019 - 2024. All rights reserved.