salesforce 零基礎開發入門學習(十三)salesforce中JSON的使用


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文檔;

1 String JSONContent = '{"isActive":true}';
2  JSONParser parser = JSON.createParser(JSONContent); 
3 // Advance to the start object marker. 
4 parser.nextToken(); 
5 // Advance to the next value. 
6 parser.nextValue(); 
7 // Get the Boolean value. 
8 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。如果有內容寫錯的地方歡迎批評指正,如果有問題歡迎留言共同探討,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM