Since
JSON可以表示四個基本類型(字符串,數字, 布爾值和零)和兩個結構化類型(對象和數組)。
一個字符串是一個零個或多個Unicode字符序列 [UNICODE]。
一個目的是零個或多個名稱/值
對,其中一個名稱是字符串的無序集合和一個值是一個字符串,號碼,
布爾值,null,對象或數組。
數組是零個或多個值的有序序列。
GSON動作2種方式:
- 可以讓GSON反序列化創建地圖,列表和原語或
- 您可以指定正是那種你想要的對象的組合,並通過反思,它將填滿所需的領域。
你可以混合使用這兩種方法,當然你可以做更多的事情來解決所有的解析案例(比如使用自定義類型適配器)。
我準備您在使用類一個小例子,顯示瞭如何GSON可以使用地圖/表/圖元的組合,或者通過你的類(具有混合的方法)分析數據。
package stackoverflow.questions;
import java.util.*;
import com.google.gson.Gson;
public class Q20154323 {
public static class Data {
public String aName;
public HashMap<String, Object> objects;
public List<String> aExpressions;
@Override
public String toString() {
return "Data [aName=" + aName + ", objects=" + objects + ", aExpressions=" + aExpressions + "]";
}
}
public static void main(String[] args) {
Data d = new Data();
d.aName = "Test";
d.objects = new HashMap<>();
d.aExpressions = new ArrayList<>();
d.objects.put("key1", 1L);
d.objects.put("key2", new Date());
d.aExpressions.add("Stack");
d.aExpressions.add("Overflow");
Gson g = new Gson();
String json = g.toJson(d);
System.out.println("As JSON: " +json);
Data d2 = g.fromJson(json, Data.class);
System.out.println("As \"casted\" data type: " + d2);
Object o3 = g.fromJson(json, Object.class);
System.out.println("As \"free\" object: " + o3);
}
}
這就是執行。它向您展示瞭解析我使用初始類創建的JSON字符串的兩種方式。
As JSON: {"aName":"Test","objects":{"key2":"Nov 23, 2013 1:33:23 AM","key1":1},"aExpressions":["Stack","Overflow"]}
As "casted" data type: Data [aName=Test, objects={key2=Nov 23, 2013 1:33:23 AM, key1=1.0}, aExpressions=[Stack, Overflow]]
As "free" object: {aName=Test, objects={key2=Nov 23, 2013 1:33:23 AM, key1=1.0}, aExpressions=[Stack, Overflow]}
您可以根據需要使用一種或其他方法。
關於TypeToken
,由於仿製藥擦除,這樣的事情
List<Data> list = new Gson().parse(aJsonString, List<Data>.class)
將無法正常工作,你必須做一些像
Type listType = new TypeToken<List<Data>>() {}.getType();
List<Data> list = new Gson().parse(aJsonString, listType.class)
,但這種情況下適用,pratically,當你的JSON是一個數組,您想將其反序列化爲自定義類的列表。
你認爲JSON是什麼?它是使用標準符號將列表和地圖和字符串和數字放在一起。只要您的List或Map包含(遞歸)只列表,地圖,字符串,布爾值和數字(以及任何您用於NULL),它很容易被轉換成JSON。 –
(您在Java中遇到的一個問題是標準的Java JSON工具包模糊了符號的簡單性。) –