使用Jackson来实现Java对象与JSON的相互转换的教程
一、入门
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(); } }
更多使用Jackson来实现Java对象与JSON的相互转换的教程相关文章请关注PHP中文网!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

AJackson ialah API JSON Java yang menyediakan beberapa cara berbeza untuk memproses JSON. Kami boleh menukar data CSV kepada data JSON menggunakan kelas CsvMapper, yang merupakan ObjectMapper khas dengan fungsi lanjutan untuk menukar POJO kepada tika CsvSchema. Kita boleh membina ObjectReader dengan tetapan lalai menggunakan kaedah reader(). Untuk menukar kita perlu mengimport com.fasterxml.jac

[Notis Kerentanan] Pada 19 Februari, NVD mengeluarkan notis keselamatan yang mendedahkan kelemahan pelaksanaan kod jauh (CVE-2020-8840) dalam jackson-databind yang disebabkan oleh suntikan JNDI, dengan skor CVSS 9.8. Versi jackson-databind yang terjejas tidak mempunyai kelas senarai hitam xbean-reflect/JNDI tertentu, seperti org.apache.xbean.propertyeditor.JndiConverter, yang boleh menyebabkan penyerang menggunakan suntikan JNDI untuk mencapai pelaksanaan kod jauh. Pada masa ini, pengilang telah mengeluarkan versi baharu untuk menyelesaikan pembaikan kelemahan. Pengguna yang berkaitan diminta untuk meningkatkan dalam masa untuk perlindungan. Sejak S digunakan dalam projek

JSONObject boleh menghuraikan teks dalam rentetan untuk menjana objek jenis Peta. Penghitungan boleh digunakan untuk mentakrifkan koleksi pemalar Kita boleh menggunakan penghitungan apabila kita memerlukan senarai nilai yang telah ditetapkan yang tidak mewakili beberapa jenis data berangka atau teks. Kita boleh menukar objek JSON kepada penghitungan menggunakan kaedah readValue() kelas ObjectMapper. Dalam contoh di bawah, kita boleh menggunakan perpustakaan Jackson untuk menukar/menyahserialisasi objek JSON kepada penghitungan Java. Contoh importcom.fasterxml.jackson.databind.*;publicclassJSONToEnumTest{ &

Jackson ialah perpustakaan berasaskan Java yang berguna untuk menukar objek Java kepada JSON dan JSON kepada objek Java. JacksonAPI lebih pantas daripada API lain, memerlukan kawasan memori yang kurang dan sesuai untuk objek besar. Kami menggunakan kaedah writeValueAsString() kelas XmlMapper untuk menukar POJO kepada format XML, dan tika POJO yang sepadan perlu dihantar sebagai parameter kepada kaedah ini. Sintaks publicStringwriteValueAsString(Objectvalue)throwsJsonProcessingExceptionExampleimp

TheJSONJacksonisalibraryforJava.Iamempunyaikeupayaandatatabindingdanmenyediakankerangkakerjamenserialkanobjekjava tersuaiuntukJSONdandeserialisasiJSON kembali keobjekJava.Kami juga boleh menukarkanXMLformatkepadaobjekPOJOjekmenggunakankaedahNilai()XmlMapper&nb

Tetapan lalai untuk semua penghurai JSON boleh diwakili menggunakan penghitungan JsonParser.Feature. JsonParser.Feature.values() akan mengembalikan semua ciri yang tersedia untuk JSONParser, tetapi sama ada ciri didayakan atau dilumpuhkan untuk parser tertentu boleh ditentukan menggunakan kaedah isEnabled() JsonParser. Sintaks publicstaticenumJsonParser.FeatureextendsEnum<JsonParser.Feature>Contoh importcom.fas

1. Latar Belakang: Beberapa maklumat sensitif dalam projek tidak boleh dipaparkan secara langsung, seperti nombor telefon mudah alih pelanggan, kad ID, nombor plat dan maklumat lain Data mesti dinyahpekakan apabila dipaparkan untuk mengelakkan kebocoran privasi pelanggan. Penyahpekaan bermaksud merawat sebahagian daripada data dengan simbol penyahpekaan (*). 2. Apabila sasaran mengembalikan data daripada pelayan, gunakan siri Jackson untuk melengkapkan penyahpekaan data untuk mencapai paparan maklumat sensitif yang tidak sensitif. Kurangkan jumlah pembangunan berulang dan tingkatkan kecekapan pembangunan untuk membentuk peraturan penyahpekaan yang bersatu dan berkesan. Ia boleh berdasarkan kaedah penyahpekaan menulis semula pelaksanaan penyahpekaan lalai untuk merealisasikan keperluan penyahpekaan bagi senario perniagaan yang diperibadikan berskala dan boleh disesuaikan 3. Pelaksanaan utama 3.1 Berdasarkan pelaksanaan penyiaran penyiaran Jackson Custom StdSerializer: semua standard

Anotasi @ConstructorProperties berasal daripada pakej java.bean dan digunakan untuk menyahsiri JSON menjadi objek java melalui pembina beranotasi. Anotasi ini disokong bermula dari Jackson 2.7. Cara anotasi ini berfungsi adalah sangat mudah, bukannya menganotasi setiap parameter dalam pembina, kami boleh menyediakan tatasusunan yang mengandungi nama harta untuk setiap parameter pembina. Syntax@Documented@Target(value=CONSTRUCTOR)@Retention(value=RUNTIME)public@interfaceConstructorPropertiesContoh impo
