我有一个像这样的 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'));
我需要的是某个变量中的姓名和电子邮件的值。 请帮我解决这个问题!
这将是一项乏味的任务,但是一旦您将所有数据分类到适当的
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