国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

使用Jackson來實現Java對象與JSON的相互轉換的教程

2019-11-26 14:41:13
字體:
來源:轉載
供稿:網友

一、入門
Jackson中有個ObjectMapper類很是實用,用于Java對象與JSON的互換。
1.JAVA對象轉JSON[JSON序列化]

import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat;  import com.fasterxml.jackson.databind.ObjectMapper;  public class JacksonDemo {   public static void main(String[] args) throws ParseException, IOException {     User user = new User();     user.setName("小民");      user.setEmail("xiaomin@sina.com");     user.setAge(20);          SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");     user.setBirthday(dateformat.parse("1996-10-01"));              /**      * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中實現。      * ObjectMapper有多個JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介質中。      * writeValue(File arg0, Object arg1)把arg1轉成json序列,并保存到arg0文件中。      * writeValue(OutputStream arg0, Object arg1)把arg1轉成json序列,并保存到arg0輸出流中。      * writeValueAsBytes(Object arg0)把arg0轉成json序列,并把結果輸出成字節數組。      * writeValueAsString(Object arg0)把arg0轉成json序列,并把結果輸出成字符串。      */     ObjectMapper mapper = new ObjectMapper();          //User類轉JSON     //輸出結果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}     String json = mapper.writeValueAsString(user);     System.out.println(json);          //Java集合轉JSON     //輸出結果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]     List<User> users = new ArrayList<User>();     users.add(user);     String jsonlist = mapper.writeValueAsString(users);     System.out.println(jsonlist);   } } 

2.JSON轉Java類[JSON反序列化]

import java.io.IOException; import java.text.ParseException; import com.fasterxml.jackson.databind.ObjectMapper;  public class JacksonDemo {   public static void main(String[] args) throws ParseException, IOException {     String json = "{/"name/":/"小民/",/"age/":20,/"birthday/":844099200000,/"email/":/"xiaomin@sina.com/"}";          /**      * ObjectMapper支持從byte[]、File、InputStream、字符串等數據的JSON反序列化。      */     ObjectMapper mapper = new ObjectMapper();     User user = mapper.readValue(json, User.class);     System.out.println(user);   } } 

 
二、Jackson支持3種使用方式:
1、Data Binding:最方便使用.
(1)Full Data Binding:

private static final String MODEL_BINDING = "{/"name/":/"name1/",/"type/":1}";   public void fullDataBinding() throws Exception{     ObjectMapper mapper = new ObjectMapper();     Model user = mapper.readValue(MODEL_BINDING, Model.class);//readValue到一個實體類中.     System.out.println(user.getName());     System.out.println(user.getType());   } 

Model類:

private static class Model{     private String name;     private int type;          public String getName() {       return name;     }     public void setName(String name) {       this.name = name;     }     public int getType() {       return type;     }     public void setType(int type) {       this.type = type;     }   } 

(2)Raw Data Binding:

/**   Concrete Java types that Jackson will use for simple data binding are:   JSON Type    Java Type   object     LinkedHashMap<String,Object>   array      ArrayList<Object>   string     String   number(no fraction) Integer, Long or BigInteger (smallest applicable)   number(fraction)  Double(configurable to use BigDecimal)   true|false   Boolean   null      null   */   public void rawDataBinding() throws Exception{     ObjectMapper mapper = new ObjectMapper();     HashMap map = mapper.readValue(MODEL_BINDING,HashMap.class);//readValue到一個原始數據類型.     System.out.println(map.get("name"));     System.out.println(map.get("type"));   } 

 (3)generic Data Binding:

private static final String GENERIC_BINDING = "{/"key1/":{/"name/":/"name2/",/"type/":2},/"key2/":{/"name/":/"name3/",/"type/":3}}";   public void genericDataBinding() throws Exception{     ObjectMapper mapper = new ObjectMapper();     HashMap<String,Model> modelMap = mapper.readValue(GENERIC_BINDING,new TypeReference<HashMap<String,Model>>(){});//readValue到一個范型數據中.     Model model = modelMap.get("key2");     System.out.println(model.getName());     System.out.println(model.getType());   } 

2、Tree Model:最靈活。

private static final String TREE_MODEL_BINDING = "{/"treekey1/":/"treevalue1/",/"treekey2/":/"treevalue2/",/"children/":[{/"childkey1/":/"childkey1/"}]}";   public void treeModelBinding() throws Exception{     ObjectMapper mapper = new ObjectMapper();     JsonNode rootNode = mapper.readTree(TREE_MODEL_BINDING);     //path與get作用相同,但是當找不到該節點的時候,返回missing node而不是Null.     String treekey2value = rootNode.path("treekey2").getTextValue();//     System.out.println("treekey2value:" + treekey2value);     JsonNode childrenNode = rootNode.path("children");     String childkey1Value = childrenNode.get(0).path("childkey1").getTextValue();     System.out.println("childkey1Value:"+childkey1Value);          //創建根節點     ObjectNode root = mapper.createObjectNode();     //創建子節點1     ObjectNode node1 = mapper.createObjectNode();     node1.put("nodekey1",1);     node1.put("nodekey2",2);     //綁定子節點1     root.put("child",node1);     //數組節點     ArrayNode arrayNode = mapper.createArrayNode();     arrayNode.add(node1);     arrayNode.add(1);     //綁定數組節點     root.put("arraynode", arrayNode);     //JSON讀到樹節點     JsonNode valueToTreeNode = mapper.valueToTree(TREE_MODEL_BINDING);     //綁定JSON節點     root.put("valuetotreenode",valueToTreeNode);     //JSON綁定到JSON節點對象     JsonNode bindJsonNode = mapper.readValue(GENERIC_BINDING, JsonNode.class);//綁定JSON到JSON節點對象.     //綁定JSON節點     root.put("bindJsonNode",bindJsonNode);     System.out.println(mapper.writeValueAsString(root));   } 

3、Streaming API:最佳性能。
 
對于性能要求高的程序,推薦使用流API,否則使用其他方法
不管是創建JsonGenerator還是JsonParser,都是使用JsonFactory。

package com.jingshou.jackson;  import java.io.File; import java.io.IOException;  import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken;  public class JacksonTest6 {    public static void main(String[] args) throws IOException {     JsonFactory jfactory = new JsonFactory();           /*** write to file ***/     JsonGenerator jGenerator = jfactory.createGenerator(new File(         "c://user.json"), JsonEncoding.UTF8);     jGenerator.writeStartObject(); // {         jGenerator.writeStringField("name", "mkyong"); // "name" : "mkyong"     jGenerator.writeNumberField("age", 29); // "age" : 29         jGenerator.writeFieldName("messages"); // "messages" :     jGenerator.writeStartArray(); // [         jGenerator.writeString("msg 1"); // "msg 1"     jGenerator.writeString("msg 2"); // "msg 2"     jGenerator.writeString("msg 3"); // "msg 3"         jGenerator.writeEndArray(); // ]         jGenerator.writeEndObject(); // }     jGenerator.close();          /*** read from file ***/     JsonParser jParser = jfactory.createParser(new File("c://user.json"));     // loop until token equal to "}"     while (jParser.nextToken() != JsonToken.END_OBJECT) {           String fieldname = jParser.getCurrentName();       if ("name".equals(fieldname)) {            // current token is "name",        // move to next, which is "name"'s value        jParser.nextToken();        System.out.println(jParser.getText()); // display mkyong           }           if ("age".equals(fieldname)) {            // current token is "age",         // move to next, which is "name"'s value        jParser.nextToken();        System.out.println(jParser.getIntValue()); // display 29           }           if ("messages".equals(fieldname)) {            jParser.nextToken(); // current token is "[", move next            // messages is array, loop until token equal to "]"        while (jParser.nextToken() != JsonToken.END_ARRAY) {                  // display msg1, msg2, msg3          System.out.println(jParser.getText());             }           }          }      jParser.close();    }  } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙田区| 讷河市| 大方县| 延安市| 班玛县| 蒙城县| 永登县| 乡宁县| 广南县| 沙河市| 四子王旗| 板桥市| 滨海县| 万安县| 元谋县| 内黄县| 牡丹江市| 逊克县| 芜湖县| 名山县| 都昌县| 阿克陶县| 鄢陵县| 子洲县| 莱西市| 翁牛特旗| 海晏县| 关岭| 汪清县| 青海省| 凤山市| 和硕县| 本溪| 阿坝县| 新巴尔虎左旗| 尼玛县| 武清区| 昌乐县| 诏安县| 潜山县| 涿州市|