1. Начало работы
В Джексоне есть класс ObjectMapper, который очень практичен, используемый для обмена Java Objects и JSON.
1. Java объект JSON [JSON Serialization]
импортировать java.io.ioexception; импортировать java.text.parseexception; импортировать java.text.simpledateformat; Import com.fasterxml.jackson.databind.objectmapper; открытый класс 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, и все операции JSON Jackson реализуются в ObjectMapper. * ObjectMapper имеет несколько методов сериализации JSON, которые могут сохранить строки JSON в различных носителях, таких как файл, outputStream и т. Д. * writevalue (outputstream arg0, object arg1) преобразует Arg1 в последовательность JSON и сохраняет его в выходном потоке Arg0. * writevalueasbytes (Object arg0) преобразует Arg0 в последовательность JSON и выводит результат в байт -массив. * writevalueasString (Object Arg0) преобразует ARG0 в последовательность JSON и выводит результат в строку. */ ObjectMapper mapper = new ObjectMapper (); // класс пользователя в JSON // Результат вывода: {«Имя»: «Xiaomin», «Возраст»: 20, «День рождения»: 844099200000, «Электронная почта»: «[email protected]»} string json = mapper.writevalueasString (пользователь); System.out.println (json); // Коллекция Java для JSON // Результат вывода: [{"name": "Xiaomin", "AGE": 20, "День рождения": 844099200000, "Электронная почта": "[email protected]"}] list <user> users = new ArrayList <user> (); users.add (пользователь); String jsonlist = mapper.writevalueasString (пользователи); System.out.println (jsonlist); }}2.json to java class [json deserialization]
импортировать java.io.ioexception; импортировать java.text.parseexception; Import com.fasterxml.jackson.databind.objectmapper; открытый класс Jacksondemo {public static void main (string [] args) бросает parseexception, ioexception {String json = "{/"name/"/"xiaomin/",/"ge/":20,/"birthday/":844099200000 ,/"mail/"/"xiaomin@sina strina" / ** * ObjectMapper поддерживает десериализацию JSON из Byte [], файла, InputStream, Strings и т. Д. */ ObjectMapper Mapper = new ObjectMapper (); User user = mapper.readvalue (json, user.class); System.out.println (пользователь); }}
2. Джексон поддерживает 3 метода использования:
1. Привязка данных: наиболее удобное в использовании.
(1) Полное привязка данных:
Private Static Final String model_binding = "{/" name/":/" name1/",/" type/": 1}"; public void fulldataBinding () бросает исключение {ObjectMapper mapper = new ObjectMapper (); Model user = mapper.readvalue (model_binding, model.class); // readvalue в класс объекта. System.out.println (user.getName ()); System.out.println (user.getType ()); }Модельный класс:
Приватный статический класс модель {Private String name; частный тип int; 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) необработанное привязка данных:
/ ** Бетонные типы Java, которые Джексон будет использовать для простого привязки данных: json type java -тип объекта LinkedHashmap <String, Object> Array ArrayList <Object> строковый номер (без фракции) Интеллектор, длинная или бигминтегер (наименьший применимый) номер (фракция) Double (настройка для использования BigDecimal). 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) Общее привязка данных:
Приватная статическая конечная строка geneic_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, новый 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/",/" kids/": [{/" ChildKey1/":/" ChildKey1/"}]}"; public void treModelbinding () бросает исключение {ObjectMapper mapper = new ObjectMapper (); Jsonnode rootnode = mapper.readtree (tree_model_binding); // Путь и получить функцию так же, как и GET, но когда узел не может быть найден, он возвращает отсутствующий узел вместо нуля. String TreeKey2value = rootNode.path ("treeKey2"). GetTextValue (); // system.out.println ("treekey2value:" + treekey2value); Jsonnode kidsnode = rootnode.path ("Дети"); String ChildKey1value = childrennode.get (0) .path ("ChildKey1"). GetTextValue (); System.out.println ("ChildKey1value:"+ChildKey1value); // Создать root node octionnode root = mapper.createObjectNode (); // Создать дочерний узл1 objectNode node1 = mapper.createObjectNode (); node1.put ("nodekey1", 1); node1.put ("nodekey2", 2); // Связывать дочерний узел 1 root.put ("ребенок", узел1); // arraynode arraynode = mapper.createarrayNode (); arraynode.add (node1); arraynode.add (1); // Привязано root узла массива ("ArrayNode", ArrayNode); // json читает узел дерева jsonnode valuetotreenode = mapper.valuetotree (tree_model_binding); // Связывать json node root.put ("valuetotreenode", valuetotreenode); // Связывать объект json node jsonnode bindjsonnode = mapper.readvalue (generic_binding, jsonnode.class); // Привязано объект узла JSON. // связывать json node root.put ("bindjsonnode", bindjsonnode); System.out.println (mapper.writevalueasstring (root)); } 3. Streaming API: Лучшая производительность.
Для программ с высокопроизводительными требованиями рекомендуется использовать потоковой API. В противном случае, используя другие методы, будь то для создания JSongenerator или JSonParser, используется JSONFactory.
Пакет com.jingshou.jackson; Импорт java.io.file; импортировать 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; открытый класс 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); // "возраст": 29 jgenerator.writefieldname ("Сообщения"); // "Сообщения": 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 (); /*** Читать из файла ***/jsonparser jparser = jfactory.createParser (new File ("c: //user.json")); // цикл до тех пор, пока токен не будет рад "}" while (jparser.nexttoken ()! = jsontoken.end_object) {String fieldname = jparser.getCurrentName (); if ("name" .equals (fieldname)) {// current token - это "имя", // перейти к следующему, что является значением "имени" jparser.nexttoken (); System.out.println (jparser.getText ()); // отображать mkyong} if ("age" .equals (fieldname)) {// текущий токен «возраст», // перейти к следующему, которое является значением «имени» jparser.nexttoken (); System.out.println (jparser.getIntValue ()); // отображать 29} if ("Сообщения". Equals (FieldName)) {jParser.NextToken (); // текущий токен - это «[», перемещение следующих // Сообщения - это массив, цикл до того, как токен не будет равен «]» while (jparser.nexttoken ()! = jsontoken.end_array) {// отображать msg1, msg2, msg3 system.out.println (jparser.getText ()); }}} jparser.close (); }}