在Salesforce Apex中解析JSON对象

8

如何在Apex中解析给定格式的jsonObject?

我需要从items数组中包含id属性的List<String>。有什么适当的方法吗?

为了解析它,我尝试创建一个带有以下代码的类:

public class JSON2Apex {

    public class Items {
        public String kind;
        public String etag;
        public String id;
        public String status;
        public String htmlLink;
        public String created;
        public String updated;
        public String summary;
        public String description;
        public String location;
        public Creator creator;
        public Creator organizer;
        public Start start;
        public Start end;
        public String iCalUID;
        public Integer sequence;
        public Reminders reminders;
    }

    public class Reminders {
        public Boolean useDefault;
    }

    public class Start {
        public String dateTime;
    }

    public class Creator {
        public String email;
        public String displayName;
        public Boolean self;
    }

    public String kind;
    public String etag;
    public String summary;
    public String updated;
    public String timeZone;
    public String accessRole;
    public List<DefaultReminders> defaultReminders;
    public List<Items> items;

    public class DefaultReminders {
        public String method;
        public Integer minutes;
    }

}

但在这个类中,它显示了一些保留关键字,例如"end"、"dateTime"等,因此无法继续使用这种方法。

{
    "kind": "calendar#events",
    "etag": "\"ZrhdJMCgpoUK_a5fT7XOC6xn46g/jAScaUzsyk9nbyyvTc1Wa3-tulA\"",
    "summary": "riteshmehandiratta@gmail.com",
    "updated": "2013-02-16T16:23:20.057Z",
    "timeZone": "Asia/Calcutta",
    "accessRole": "owner",
    "defaultReminders": [
        {
            "method": "email",
            "minutes": 10
        },
        {
            "method": "popup",
            "minutes": 10
        }
    ],
    "items": [
        {
            "kind": "calendar#event",
            "etag": "\"ZrhdJMCgpoUK_a5fT7XOC6xn46g/Z2NhbDAwMDAxMzU2MTQ1NTg1NjYxMDAw\"",
            "id": "ngo4lfq6q7c4dm8bej7m47e5lc",
            "status": "confirmed",
            "htmlLink": "https://www.google.com/calendar/event?eid=bmdvNGxmcTZxN2M0ZG04YmVqN200N2U1bGMgcml0ZXNobWVoYW5kaXJhdHRhQG0",
            "created": "2012-12-22T03:04:01.000Z",
            "updated": "2012-12-22T03:06:25.661Z",
            "summary": "hello",
            "description": "hgjgjh",
            "location": "hkhkhk",
            "creator": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "organizer": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "start": {
                "dateTime": "2013-01-01T10:00:00+05:30"
            },
            "end": {
                "dateTime": "2013-01-15T00:00:00+05:30"
            },
            "iCalUID": "ngo4lfq6q7c4dm8bej7m47e5lc@google.com",
            "sequence": 1,
            "reminders": {
                "useDefault": true
            }
        },
        {
            "kind": "calendar#event",
            "etag": "\"ZrhdJMCgpoUK_a5fT7XOC6xn46g/Z2NhbDAwMDAxMzYxMDMxNTg1OTYzMDAw\"",
            "id": "oap7nr7ukjug6euo24kvhmfbm0",
            "status": "confirmed",
            "htmlLink": "https://www.google.com/calendar/event?eid=b2FwN25yN3VranVnNmV1bzI0a3ZobWZibTAgcml0ZXNobWVoYW5kaXJhdHRhQG0",
            "created": "2013-02-16T16:19:45.000Z",
            "updated": "2013-02-16T16:19:45.963Z",
            "summary": "Hello World",
            "creator": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "organizer": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "start": {
                "dateTime": "2013-02-11T11:00:00+05:30"
            },
            "end": {
                "dateTime": "2013-02-11T12:00:00+05:30"
            },
            "iCalUID": "oap7nr7ukjug6euo24kvhmfbm0@google.com",
            "sequence": 0,
            "reminders": {
                "useDefault": true
            }
        },
        {
           "kind": "calendar#event",
           "etag": "\"ZrhdJMCgpoUK_a5fT7XOC6xn46g/Z2NhbDAwMDAxMzYxMDMxNjQxMDYzMDAw\"",
           "id": "k2mvqecqdgoudt6fl4e5hhqna0",
           "status": "confirmed",
           "htmlLink": "https://www.google.com/calendar/event?eid=azJtdnFlY3FkZ291ZHQ2Zmw0ZTVoaHFuYTAgcml0ZXNobWVoYW5kaXJhdHRhQG0",
           "created": "2013-02-16T16:20:41.000Z",
           "updated": "2013-02-16T16:20:41.063Z",
           "summary": "Hello Wol",
           "creator": {
               "email": "riteshmehandiratta@gmail.com",
               "displayName": "RITESH MEHANDIRATTA",
               "self": true
           },
           "organizer": {
               "email": "riteshmehandiratta@gmail.com",
               "displayName": "RITESH MEHANDIRATTA",
               "self": true
           },
           "start": {
               "dateTime": "2013-02-11T13:00:00+05:30"
           },
           "end": {
               "dateTime": "2013-02-11T14:00:00+05:30"
           },
           "iCalUID": "k2mvqecqdgoudt6fl4e5hhqna0@google.com",
           "sequence": 0,
           "reminders": {
               "useDefault": true
           }
        },
        {
            "kind": "calendar#event",
            "etag": "\"ZrhdJMCgpoUK_a5fT7XOC6xn46g/Z2NhbDAwMDAxMzYxMDMxNjUyNDE1MDAw\"",
            "id": "0n2if07oo9pvfdnf7f0a6cldns",
            "status": "confirmed",
            "htmlLink": "https://www.google.com/calendar/event?eid=MG4yaWYwN29vOXB2ZmRuZjdmMGE2Y2xkbnMgcml0ZXNobWVoYW5kaXJhdHRhQG0",
            "created": "2013-02-16T16:20:52.000Z",
            "updated": "2013-02-16T16:20:52.415Z",
            "summary": "Hello World1",
            "creator": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "organizer": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "start": {
                "dateTime": "2013-02-11T15:30:00+05:30"
            },
            "end": {
                "dateTime": "2013-02-11T16:30:00+05:30"
            },
            "iCalUID": "0n2if07oo9pvfdnf7f0a6cldns@google.com",
            "sequence": 0,
            "reminders": {
                "useDefault": true
            }
        },
        {
            "kind": "calendar#event",
            "etag": "\"ZrhdJMCgpoUK_a5fT7XOC6xn46g/Z2NhbDAwMDAxMzYxMDMxNzcwNDMzMDAw\"",
            "id": "r365lrv775bqjiplmaqjro9grc",
            "status": "confirmed",
            "htmlLink": "https://www.google.com/calendar/event?eid=cjM2NWxydjc3NWJxamlwbG1hcWpybzlncmMgcml0ZXNobWVoYW5kaXJhdHRhQG0",
            "created": "2013-02-16T16:22:50.000Z",
            "updated": "2013-02-16T16:22:50.433Z",
            "creator": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "organizer": {
                "email": "riteshmehandiratta@gmail.com",
                "displayName": "RITESH MEHANDIRATTA",
                "self": true
            },
            "start": {
                "dateTime": "2013-02-11T14:30:00+05:30"
            },
            "end": {
                "dateTime": "2013-02-11T15:30:00+05:30"
            },
            "iCalUID": "r365lrv775bqjiplmaqjro9grc@google.com",
            "sequence": 0,
            "reminders": {
                "useDefault": true
            }
        }
    ]
}
1个回答

20

您可以使用deserializeUntyped函数来处理纯对象/列表/映射对象中的JSON数据。您只需要记得将所有内容转换为期望的类型(就像在Java中一样)。因此,要访问每个项目的ID字段,您需要执行以下操作:

public void parse() {
    Map<String, Object> root = (Map<String, Object>)JSON.deserializeUntyped(getJsonToParse());
    List<Object> items = (List<Object>)root.get('items');
    for (Object item : items) {
        Map<String, Object> i = (Map<String, Object>)item;
        System.debug(i.get('id'));
    }
}

生成以下调试输出:

Debug log results


嘿,请回复这个查询 https://dev59.com/ZG7Xa4cB1Zd3GeqPrZEH - mathlearner
@superfell - 你太棒了!你的回答帮我解决了难题!谢谢! - Vivek M. Chawla
对我来说,使用未类型化的方式使得获取嵌套值更加容易,因为我可以使用 .get 而不必迭代它。也许有一种替代方法,但我找不到... - Sabrina Leggett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接