轉載請注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html
一:JSON語言規范
一言以蔽之:“一個 :一個鍵值對,一個{}一個對象,一個[]一個數組”
key:只能是string
value:可以是string、number、boolean、null
二:Jackson數據綁定方式操作JSON
Jackson操作JSON主要用到兩個類:JsonGenerator、objectMapper
准備工作:創建objectMapper,並由objectMapper創建JsonGenerator
ObjectMapper objectMapper = new ObjectMapper(); JsonGenerator jsonGenerator=objectMapper.getJsonFactory()
.createJsonGenerator(fileoutputStream, encoding);//通過文件流打開一個文本文檔,並指明編碼格式
1:Java對象轉JSON
JavaBean、Map對象、list對象、數組對象轉JSON
jsonGenerator.writeObject(bean);
或
objectMapper.writeValue(outputStream,bean);
2:讀取JSON字符串轉換成Java對象、Map對象、List對象、數組
1)讀取JSON字符串轉JavaBean
ClassName bean= objectMapper.readValue(json_String, ClassName.class);//傳一個class對象作為通過json字符串構造java對象的依據
2)讀取JSON字符串轉List對象
List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json_string, List.class);
(注意:此處List中的泛型不能指定為某中JavaBean類似,只能用LinkedHashMap,因為泛型轉換不能識別到集合中的對象類型)
3)讀取JSON字符串轉數組
ClassName[] arr = objectMapper.readValue(json_string, ClassName[].class);//同理,傳遞class對象作為解析JSON字符串的依據
4)讀取JSON字符串轉Map對象
Map<String, Map<String, Object>> maps = objectMapper.readValue(jsonstring, Map.class);
三:Gson操作JSON
1:Java對象轉JSON
1)簡單轉換(無格式)
Gson gson=new Gson(); String jsonstring=gson.toJson(bean);
2)帶格式轉換:需要使用builder來生成Gson,通過builder來設定轉換格式。
GsonBuilder builder=new GsonBuilder(); builder.setXXX();//改名、縮進等 Gson gson=builder.create(); String jsonstring=gson.toJson();
3)Gson注釋制定規則
可以在JavaBean定義時,為某個字段添加Gson注釋,指定轉換為Json時該字段的別名、格式等。
4)transient
用transient修飾的字段不會被序列化,也就是說不會轉換為Json字符串
2:JSON解析
1)簡單轉換:把Json數據解析為 String:String鍵值對
Gson gson=new Gson(); ClassName bean=gson.fromJson(jsonstring,class);//解析Json字符串 ClassName bean=gson.f romJson(reader,class);//解析文件中的Json數據
2)帶格式轉換:根據數據格式解析Json字符串中鍵值對,使解析達到的對象的字段值符號定義時的類型
GsonBuilder builder=new GsonBuilder(); builder.setXXFormat("數據類型格式");//XX是一種數據類型,參數為該類型數據的格式。比如:Date類型。這樣Json數據中符號該格式的內容解析出來就是XX類型而不是String。 Gson gson=builder.create();
ClassName bean=gson.fromJson(jsonstring,class);//解析Json字符串
ClassName bean=gson.f romJson(reader,class);//解析文件中的Json數據
(注意:Java中集合類、數組,轉換為Json時都是Json數組;而Json數組轉換過來時,則自動根據數組名對應的類型來自動轉換成集合類、Java數組)