在Salesforce Apex中解析JSON对象

在Salesforce Apex中解析JSON对象

问题描述:

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

How do I parse a jsonObject which is in a given format in Apex?

我需要包含id属性的items数组中的List< String>.什么是合适的方法?

I need List<String> from the items array which contains the id attribute. What is some appropriate method?

为了解析它,我尝试用代码创建一个类:

For parsing it, I try to create a class with code:

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等用户,因此无法继续使用此方法.

But in this class it is showing some reserved keyword is user like end , dateTime etc so can't proceed further with this approach.

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

您可以使用deserializeUntyped函数在纯对象/列表/地图对象中使用JSON.您只需要记住将所有内容都强制转换为期望的类型(就像在Java中一样).因此,要访问每个项目的ID字段,您需要

You can use the deserializeUntyped function to work with the JSON in plain object/list/map objects. You just need to remember to cast everything to the expected type (exactly as you would in Java). So to access the id field of each item, you'd do

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'));
    }
}

生成以下调试输出: