前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Salesforce JSON应用(一) 反序列化deserializeUntyped方法,序列化serialize方法

Salesforce JSON应用(一) 反序列化deserializeUntyped方法,序列化serialize方法

原创
作者头像
repick
修改2022-09-23 15:23:21
4140
修改2022-09-23 15:23:21
举报
文章被收录于专栏:SalesforceSalesforce

Json的规格规定如下

1) 并列的数据之间用逗号(", ")分隔。

2) 映射用冒号(": ")表示。

3) 并列数据的集合(数组)用方括号("[ ]")表示。

4) 映射的集合(对象)用大括号("{ }")表示。

1.反序列化

有如下两条Json格式的数据,两条数据之间用逗号(", ")分隔

代码语言:javascript
复制
[["2022-05-31T12:17:52.000+0000","0065g00000FFUJtAAP","0065g00000FFUJtAAP"],["2022-06-07T04:57:32.000+0000","0065g000007pkZOAAY","0c86D0000008OUqQAM"]]

把它存储在Object的项目中,进行反序列化处理。

【deserializeUntyped】方法用于将JSON内容反序列化成基本数据类型的集合,不能反序列化sObject类型。

代码语言:javascript
复制
public with sharing class JsonParseringClass {
    public JsonParseringClass() {
        Project__c projectItem =  [SELECT Id,SYS_Approval__c FROM Project__c WHERE Id = 'a025g00000AJaWUAA1'];
        if (projectItem?.SYS_Approval__c != null
            && projectItem?.SYS_Approval__c.startsWith('[')
            && projectItem?.SYS_Approval__c.endsWith(']')) {
            
            List<Object> deserializeUntypedJson = (List<Object>)JSON.deserializeUntyped(projectItem?.SYS_Approval__c);
            System.debug('>deserializeUntypedJson>>'+deserializeUntypedJson);
        }
    }
}

Log出力结果:

代码语言:javascript
复制
USER_DEBUG [12]|DEBUG|>deserializeUntypedJson>>((2022-05-31T12:17:52.000+0000, 0065g00000FFUJtAAP, 0065g00000FFUJtAAP), (2022-06-07T04:57:32.000+0000, 0065g000007pkZOAAY, 0c86D0000008OUqQAM))

详细出力

代码语言:javascript
复制
public with sharing class JsonParseringClass {
    public JsonParseringClass() {
        Project__c projectItem =  [SELECT Id,SYS_Approval__c FROM Project__c WHERE Id = 'a025g00000AJaWUAA1'];
        if (projectItem?.SYS_Approval__c != null
            && projectItem?.SYS_Approval__c.startsWith('[')
            && projectItem?.SYS_Approval__c.endsWith(']')) {
            List<Object> deserializeUntypedJson = (List<Object>)JSON.deserializeUntyped(projectItem?.SYS_Approval__c);

            for (Object obj : deserializeUntypedJson) {
                System.debug('>obj>>'+obj);

                for (Object item : (List<Object>)obj) {
                    System.debug('>item>>'+item);
                }
            }

        }
    }
}

2.序列化

serialize方法用于将基本数据类型序列化成Json格式,如下取出表中的Json数据,进行添加并序列化之后更新对应项目。

代码语言:javascript
复制
public with sharing class JsonParseringClass {
    /**Opportunity Prefix*/
    private static final String SOBJECT_TYPE_PREFIX_OPPORTUNITY
                        = Schema.SObjectType.Opportunity.getKeyPrefix();
    public JsonParseringClass() {
        Project__c projectItem =  [SELECT Id,SYS_Approval__c FROM Project__c WHERE Id = 'a025g00000AJaWUAA1'];
        if (projectItem?.SYS_Approval__c != null
            && projectItem?.SYS_Approval__c.startsWith('[')
            && projectItem?.SYS_Approval__c.endsWith(']')) {
            List<Object> deserializeUntypedJson = (List<Object>)JSON.deserializeUntyped(projectItem?.SYS_Approval__c);

            System.debug('>OldJson>>'+deserializeUntypedJson);
            List<Object> jsonNewList = new List<Object>();
            List<Object> jsonObNewList = new List<Object>();
            jsonObNewList.add(Datetime.now().format('yyyy-MM-dd kk:mm:ss.S', 'Asia/Tykyo'));
            jsonObNewList.add('0065g000007pkVyAAI');
            jsonObNewList.add('0065g000007pkWFAAY');
            jsonNewList.add(jsonObNewList);

            deserializeUntypedJson.addAll(jsonNewList);

            System.debug('>NewJson>>'+deserializeUntypedJson);
            for (Object obj : deserializeUntypedJson) {
                for (Object item : (List<Object>)obj) {
                    if (((String)item).startsWith(SOBJECT_TYPE_PREFIX_OPPORTUNITY)) {
                        //System.debug('>Opportunity>>'+(String)item);
                    }
                }
            }

            String serializeToJson = JSON.serialize(deserializeUntypedJson);
            projectItem.SYS_Approval__c = serializeToJson;
            update projectItem;
            System.debug('>update>>'+projectItem.SYS_Approval__c);
        }
    }
}
代码语言:javascript
复制
USER_DEBUG [12]|DEBUG|>OldJson>>((2022-05-31T12:17:52.000+0000, 0065g00000FFUJtAAP, 0065g00000FFUJtAAP), (2022-06-07T04:57:32.000+0000, 0065g000007pkZOAAY, 0c86D0000008OUqQAM))
代码语言:javascript
复制
USER_DEBUG [22]|DEBUG|>NewJson>>((2022-05-31T12:17:52.000+0000, 0065g00000FFUJtAAP, 0065g00000FFUJtAAP), (2022-06-07T04:57:32.000+0000, 0065g000007pkZOAAY, 0c86D0000008OUqQAM), (2022-09-23 06:50:14.163, 0065g000007pkVyAAI, 0065g000007pkWFAAY))
代码语言:javascript
复制
USER_DEBUG [32]|DEBUG|>update>>[["2022-05-31T12:17:52.000+0000","0065g00000FFUJtAAP","0065g00000FFUJtAAP"],["2022-06-07T04:57:32.000+0000","0065g000007pkZOAAY","0c86D0000008OUqQAM"],["2022-09-23 06:50:14.163","0065g000007pkVyAAI","0065g000007pkWFAAY"]]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.反序列化
  • 2.序列化
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档