1. 시작하기
Jackson에는 Java Objects와 JSON을 교환하는 데 매우 실용적인 ObjectMapper 클래스가 있습니다.
1. JAVA 객체 JSON [JSON 직렬화]
import java.io.ioexception; import java.text.parseexception; import java.text.simpledateformat; com.fasterxml.jackson.databind.objectmapper 가져 오기; public class Jacksondemo {public static void main (String [] args)은 parseexception, ioexception {user user = new user (); user.setName ( "Xiaomin"); user.seteMail ( "[email protected]"); user.setage (20); simpledateformat dateformat = new simpledateformat ( "yyyy-mm-dd"); user.setbirthday (dateformat.parse ( "1996-10-01")); /*** ObjectMapper는 JSON 작업의 핵심이며 Jackson의 모든 JSON 작업은 ObjectMapper에서 구현됩니다. * ObjectMapper에는 여러 JSON 직렬화 메소드가 있는데, 이는 파일, outputStream 등과 같은 다른 미디어에 JSON 문자열을 저장할 수 있습니다. * WriteValue (파일 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 = 새 개체 mapper (); // json에서 사용자 클래스 // 출력 결과 : { "이름": "Xiaomin", "Age": 20, "생일": 844099200000, "이메일": "[email protected]"} String json = mapper.writeValueAsString (user); System.out.println (JSON); // JSON에 대한 Java Collection // 출력 결과 : [{ "name": "Xiaomin", "Age": 20, "Birthday": 844099200000, "이메일": "[email protected]"}] list <user> users = new arraylist <user> (); user.add (사용자); 문자열 JSONLIST = MAPPER.WRITEVALUEASSTRING (사용자); System.out.println (jsonlist); }}2. Java 클래스에서 JSON에서 [JSON Deserialization]
import java.io.ioexception; import java.text.parseexception; com.fasterxml.jackson.databind.objectmapper 가져 오기; Public Class Jacksondemo {public static void main (String [] args)은 parseexception, ioexception {string json = "{/"name/":/"xiaomin/",/"age/"aze/":20,/"birthday/":844099200000,/"[email protected]/"} "}"; / ** * ObjectMapper는 byte [], file, inputstream, strings 등의 JSON Desserialization을 지원합니다. */ ObjectMapper Mapper = new ObjectMapper (); 사용자 user = mapper.readValue (json, user.class); System.out.println (사용자); }}
2. Jackson은 3 가지 사용 방법을 지원합니다.
1. 데이터 바인딩 : 사용하기에 가장 편리합니다.
(1) 전체 데이터 바인딩 :
개인 정적 최종 문자열 model_binding = "{/"name/":/"name1/",/"type/": 1}"; public void fullDatabinding ()은 예외를 던지고 {objectMapper mapper = new ObjectMapper (); 모델 사용자 = mapper.readValue (model_binding, model.class); // 엔티티 클래스에 대한 readValue. System.out.println (user.getName ()); System.out.println (user.gettype ()); }모델 클래스 :
개인 정적 클래스 모델 {개인 문자열 이름; 개인 int 유형; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int gettype () {return type; } public void settype (int type) {this.type = type; }}(2) 원시 데이터 바인딩 :
/ ** Jackson이 간단한 데이터 바인딩에 사용할 콘크리트 Java 유형 : JSON 유형 Java 유형 객체 링크드 하쉬 맵 <문자열, 객체> 배열> 배열> 객체> 배열> 정수, 길 또는 biginteger (가장 작은 적용 가능한) 번호 (Fraction) Double (Bigdecimal을 사용하기 위해 구성 가능) (False Bolean Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null Null) 예외 {ObjectMapper mapper = new ObjectMapper (); HASHMAP MAP = MAPPER.READVALUE (Model_Binding, Hashmap.class); // Primitive Data Type에 대한 readValue. System.out.println (map.get ( "name")); System.out.println (map.get ( "type")); }(3) 일반 데이터 바인딩 :
개인 정적 최종 문자열 generic_binding = "{/"key1/": {/"name/":/"name2/",/"type/": 2},/"key2/": {/"name/":/"name3/",/"type/": 3}}"; public void genericdatabinding ()는 예외를 던져 {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_binding = "{/"treekey1/":/"treevalue1/",/"treekey2/":/"treevalue2/",/"children/": [{/"childkey1/":/"childkey1/"}]}"; public void treemodelbinding ()는 예외를 {objectMapper mapper = new ObjectMapper (); jsonnode rootnode = mapper.readtree (tree_model_binding); // get과 동일하게 경로와 기능을 얻지 만 노드를 찾을 수 없으면 NULL 대신 누락 된 노드를 반환합니다. String treekey2value = rootnode.path ( "treekey2"). getTextValue (); // system.out.println ( "treekey2value :" + treekey2value); jsonnode childrennode = rootnode.path ( "children"); 문자열 childkey1value = childrennode.get (0) .path ( "childkey1"). getTextValue (); System.out.println ( "childkey1value :"+childkey1value); // 루트 노드 생성 ObjectNode root = mapper.createObjectNode (); // child node1 객체 node 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); // 배열 노드 루트를 바인딩합니다. // JSON은 트리 노드 JSONNODE valueToTrenode = mappper.valuetotree (tree_model_binding)를 읽습니다. // 바인드 JSON 노드 루트. // JSON 노드 객체 바인드 jsonnode bindjsonnode = mappper.readValue (generic_binding, jsonnode.class); // JSON을 JSON 노드 객체에 바인딩합니다. // bind json node root.put ( "bindjsonnode", bindjsonnode); System.out.println (mapper.writevalueasstring (root)); } 3. 스트리밍 API : 최고의 성능.
고성능 요구 사항이있는 프로그램의 경우 스트리밍 API를 사용하는 것이 좋습니다. 그렇지 않으면 JSongenerator 또는 JSONPARSER를 만들 든 다른 방법을 사용하면 JSONFACTORY가 사용됩니다.
패키지 com.jingshou.jackson; import java.io.file; import java.io.ioexception; com.fasterxml.jackson.core.jsonencoding 가져 오기; com.fasterxml.jackson.core.jsonfactory 가져 오기; 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)은 ioexception {jsonfactory jfactory = new JsonFactory (); /*** 파일에 쓰기 ***/jsongenerator jgenerator = jfactory.createGenerator (새 파일 ( "c : //user.json"), jsonencoding.utf8); jgenerator.writestartObject (); // {jgenerator.writestringfield ( "name", "mkyong"); // "이름": "mkyong"jgenerator.writenumberfield ( "Age", 29); // "age": 29 jgenerator.writefieldName ( "메시지"); // "메시지": jgenerator.writestArray (); // [jgenerator.writestring ( "msg 1"); // "msg 1"jgenerator.writestring ( "msg 2"); // "msg 2"jgenerator.writestring ( "msg 3"); // "msg 3"jgenerator.writeendArray (); //] jgenerator.writeendObject (); //} jgenerator.close (); /*** 파일에서 읽으십시오 ***/jsonparser jparser = jfactory.createParser (새 파일 ( "c : //user.json")); // 토큰이 "}"와 동일 할 때까지 루프 while (jparser.nextToken ()! = jsontoken.end_object) {String fieldname = jparser.getCurrentName (); if ( "name".equals (fieldName)) {// 현재 토큰은 "name", // 다음으로 이동합니다. System.out.println (jparser.getText ()); // display mkyong} if ( "age".equals (fieldName)) {// 현재 토큰은 "age", // 다음으로 이동합니다. System.out.println (jparser.getIntValue ()); // display 29} if ( "message".equals (fieldName)) {jparser.nextToken (); // 현재 토큰은 "[", 다음 이동 // 메시지는 배열입니다. }}} jparser.close (); }}