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

首頁 > 學院 > 開發設計 > 正文

Jackson

2019-11-08 02:06:44
字體:
來源:轉載
供稿:網友

一、入門 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(); } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 逊克县| 资源县| 昌吉市| 眉山市| 呼玛县| 鹤岗市| 海晏县| 临海市| 乐至县| 馆陶县| 利川市| 米易县| 涪陵区| 崇仁县| 松溪县| 奈曼旗| 南投县| 叙永县| 白城市| 黄平县| 锡林浩特市| 连州市| 莒南县| 米易县| 贵州省| 措美县| 江安县| 云阳县| 鹿邑县| 饶河县| 乐清市| 阿尔山市| 凤山市| 纳雍县| 高邑县| 林芝县| 丘北县| 陆河县| 大关县| 吉木乃县| 镇坪县|