JSON作为一种目前流行的轻量级数据交换格式,salesforce也对其有良好的类对其进行封装处理。salesforce中前后台交互时,使用JSON可以将apex的Object对象进行序列化和反序列化。

主要有三个类处理JSON:1.System.JSON;2.System.JSONGenerator;3.System.JSONParser

这些方法如果调用出现错误则抛出JSONException异常。

一) System.JSON

使用JSON类和方法执行往返的序列化和反序列化JSON内容,这些方法允许你将Object对象序列化成JSON内容,也允许将JSON内容反序列化成Object对象;

主要方法如下:

1.public static String serialize(Object objectToSerialize):此方法用于将Object对象序列化成JSON内容。

2.public static String serializePretty(Object objectToSerialize:此方法用于将Object对象序列化成JSON内容,和上面方法的区别仅为此方法以精美的输出格式输出。

下面通过一个例子说明:

List<Goods__c> goods = [select Id,Name,GoodsName__c from Goods__c limit 1];
//通过Serialize方法序列化
String goodsToJson = JSON.serialize(goods);
//通过serializePretty方法序列化
String goodsToJsonPretty = JSON.serializePretty(goods);
System.debug(goodsToJson);
System.debug(goodsToJsonPretty);

输出结果如下:

[{"attributes":{"type":"Goods__c","url":"/services/data/v36.0/sobjects/Goods__c/a002800000VGxdqAAD"},"Id":"a002800000VGxdqAAD","Name":"a002800000VGxdq",
"GoodsName__c":"魅蓝note3"}] [ {
"attributes" : {
"type" : "Goods__c",
"url" : "/services/data/v36.0/sobjects/Goods__c/a002800000VGxdqAAD"
},
"Id" : "a002800000VGxdqAAD",
"Name" : "a002800000VGxdq",
"GoodsName__c" : "魅蓝note3"
} ]

3.public static Object deserialize(String jsonString, System.Type apexType):此方法用于将JSON内容反序列化成Apex的Object对象

//接上面Serialize的Sample
List<Goods__c> goodsList = (List<Goods__c>)JSON.deserialize(goodsToJson,List<Goods__c>.class);
for(Goods__c goodsItem : goodsList) {
if(goodsItem.GoodsName__c != null) {
System.debug(goodsItem.GoodsName__c);
}
}

4.public static Object deserializeUntyped(String jsonString):此方法用于将指定的JSON内容反序列化成基本数据类型的集合,如果不是基本数据类型,则在反序列化时报异常:System.TypeException: Invalid conversion from runtime type List<ANY> to List<XXX>。eg:

String jsonList = '[{"2":"object2","1":"object1"}]';
List<Object> listJson = (List<Object>)JSON.deserializeUntyped(jsonList);
for(Object listItem : listJson) {
if(listItem instanceof Map<String,Object>) {
System.debug('通过json 的反序列化(Map)' + (Map<String,Object>)listItem);
} else {
System.debug('通过json 的反序列化' + listItem);
}
}

注:通过deserializeUntyped方法不能反序列化sObject类型,只允许反序列化基本数据类型。

5.public static System.JSONGenerator createGenerator(Boolean prettyPrint):返回JSONGenerator对象,其中形参prettyPrint代表JSONGenerator创建JSON内容是否遵循缩进格式,设置为true则遵循。

6.public static System.JSONParser createParser(String jsonString):返回JSONParser对象,其中形参jsonString代表要解析的json的内容。

二) JSONGenerator

此类包含的方法用来通过标准的JSON编码将object对象序列化成JSON内容,方法主要作用为将各种类型的值写入JSON content中(相当于实例化JSON content value)。方法如下所示:

1.public void close():当JSON Generator关闭以后,无法再写入内容。

2.public Boolean isClosed():判断JSON Generator是否关闭,如果关闭返回true,否则返回false。

3.public String getAsString():返回生成的JSON的内容;

4.public Void writeBoolean(Boolean blobValue):写入指定的布尔类型值;

5.public void writeXXX:详情请看API

JSONGenerator jsonGenerator = JSON.createGenerator(true);
jsonGenerator.writeStartArray();
jsonGenerator.writeStartObject();
jsonGenerator.writeBooleanField('isStatus',true);
jsonGenerator.writeEndObject();
jsonGenerator.writeEndArray();
jsonGenerator.close();
System.debug(jsonGenerator.getAsString());

运行结果:

[ {
"isStatus" : true
} ] 

三)JSONParser

使用System.JSONParser类用来解析一个调用了外部服务的JSON格式的返回的响应内容,例如WEB service callout的json格式相应。主要方法如下:

1.public Void clearCurrentToken():此方法用于清除当前的Token。此方法执行以后,hasCurrentToken方法返回false,getCurrentToken返回null,想要恢复此token可以调用getLastClearedToken方法;

2.public System.JSONToken getCurrentToken():获取当前的Token;

String JSONContent = '{"firstName":"John"}';
JSONParser parser = JSON.createParser(JSONContent);
// Advance to the next token.
while (parser.nextToken() != null) {
System.debug('Current token: ' + parser.getCurrentToken());
}

3.public Boolean getBooleanValue();获取Boolean的值;

4.public Boolean getXXX():详情请看API文档;

 String JSONContent = '{"isActive":true}';
JSONParser parser = JSON.createParser(JSONContent);
// Advance to the start object marker.
parser.nextToken();
// Advance to the next value.
parser.nextValue();
// Get the Boolean value.
Boolean isActive = parser.getBooleanValue();

5.public System.JSONToken nextToken():返回下一个Token,如果已经到达了输入流最后,则返回null;

四)JSONToken Enum

此枚举类定义一些用于解析JSON内容的Token值。

总结:如果正常的使用JSON的序列化和反序列化,System.JSON类里的serialize以及deserialize方法就足够使用了。如果需要自定义JSON样式,则可以使用JSON.Generate类来自定义JSON内容(项目中很少会遇见此种情况,通常JSON类的两种便搞定)。

本篇只是列举一部分的方法, 详情请自行查看api。如果有内容写错的地方欢迎批评指正,如果有问题欢迎留言共同探讨,转载请注明出处。

salesforce 零基础开发入门学习(十三)salesforce中JSON的使用的更多相关文章

  1. 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建   VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...

  2. 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable

    salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable   本篇知识参考:https://developer.salesforce.com/trailhead/for ...

  3. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  4. 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)   salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...

  5. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  6. 【转载】salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载

    salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载   目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新 ...

  7. salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载

    目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新公司,主要做的就是salesforce,不过当时想要看一些相关资料确实比较难.为了避免想要零基础学习的人 ...

  8. salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesforce中的数据库使用的是Force.com 平台的数据库,数据表一行数据可以理解成一个sObject变量 ...

  9. salesforce 零基础开发入门学习(十五)salesforce中formula的使用(不含Date/Time)

    本文参考官方的formula介绍PDF:https://resources.docs.salesforce.com/200/latest/en-us/sfdc/pdf/salesforce_usefu ...

随机推荐

  1. Partial backup 备份指定表/库

    Partial Backups XtraBackup支持partial backups,这意味着你可以只备份部分表或库.要备份的表必须是独立表空间,即innodb_file_per_table=1 有 ...

  2. sky简介

    sky简介 sky是一种构建高性能.跨平台手机APP的新的途径.更值得关注的是,sky是一种渲染引擎.脚本引擎.一个框架和一系列的材料设计模式的窗体组件.sky是当前以及未来手机APP的一种优化手段. ...

  3. windows 录音程序(二)

    (二)录音流程 Waveform APIs,流程如下: a.打开录音设备waveInOpen; b.准备wave数据头waveInPrepareHeader; c.准备数据块waveInAddBuff ...

  4. css布局模型

    ---恢复内容开始--- 在清楚了CSS盒模型的基本概念,盒模型类型,我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是CSS最基本,最核心的概念.但布局模型是建立在盒型基础之上,又不同 ...

  5. Zabbix日志监视的汇总报警(更新发送邮件脚本)

    Zabbix的用户一定会碰到这种情况: 日志报警一般设置的是multiple模式,有错误大量写入的时候,每写入一行就会触发一次action,导致出现大量的报警邮件. 特别是ora的报警,经常一出就是上 ...

  6. JavaScript中JSONObject和JSONArray相关知识备忘(网络转载)

    1.json的格式,有两种: {"key": "value"} //JSONObject(对象) [{"key1": "value ...

  7. 手Q兴趣号的价值在哪里

    拥有5.21亿月活跃用户,如果不做点什么东西出来,实在是浪费至极.如此庞大的用户量,如果能够将内容贡献出来,那将是恐怖的,QQ空间产品就是很好的佐证. QQ群让个体用户能够连接在一起,单个的用户关系链 ...

  8. asp.net linux 环境部署, jexus

    cd /tmpwget linuxdot.net/down/jexus-5.8.1-x64.tar.gztar -zxvf jexus-5.8.1-x64.tar.gzsudo mv jexus /u ...

  9. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  10. javascript中this指针探讨

    javascript是一门类java语言有很多跟java相类似的特点,但也仅是类似而已,真正使用中还是有很大的差别.this指针常常让很多初学者抓狂,本人也曾为此困惑不解,查找过很多资料,今天在这里总 ...