Rumah Java javaTutorial 使用Jackson来实现Java对象与JSON的相互转换的教程

使用Jackson来实现Java对象与JSON的相互转换的教程

Feb 16, 2017 pm 04:54 PM
jackson

一、入门

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); 
  } 
}
Salin selepas log masuk

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); 
  } 
}
Salin selepas log masuk

 
二、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()); 
  }
Salin selepas log masuk

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; 
    } 
  }
Salin selepas log masuk

(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")); 
  }
Salin selepas log masuk

 (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()); 
  }
Salin selepas log masuk

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)); 
  }
Salin selepas log masuk

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(); 
 
  } 
 
}
Salin selepas log masuk

更多使用Jackson来实现Java对象与JSON的相互转换的教程相关文章请关注PHP中文网!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tukar CSV kepada JSON menggunakan perpustakaan Jackson di Java? Tukar CSV kepada JSON menggunakan perpustakaan Jackson di Java? Aug 18, 2023 pm 11:49 PM

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

Bagaimana untuk menyelesaikan masalah menentukan versi jackson dalam peningkatan SpringBoot Bagaimana untuk menyelesaikan masalah menentukan versi jackson dalam peningkatan SpringBoot May 12, 2023 pm 02:13 PM

[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

Bagaimana untuk menukar objek JSON kepada jenis enum di Java menggunakan Jackson? Bagaimana untuk menukar objek JSON kepada jenis enum di Java menggunakan Jackson? Sep 05, 2023 pm 12:13 PM

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{ &

Tukar POJO kepada XML menggunakan perpustakaan Jackson di Jawa? Tukar POJO kepada XML menggunakan perpustakaan Jackson di Jawa? Sep 18, 2023 pm 02:21 PM

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

Tukar XML kepada POJO menggunakan perpustakaan Jackson di Jawa? Tukar XML kepada POJO menggunakan perpustakaan Jackson di Jawa? Aug 30, 2023 am 10:21 AM

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

Bagaimana untuk mendapatkan tetapan lalai JSONParser menggunakan Jackson di Java? Bagaimana untuk mendapatkan tetapan lalai JSONParser menggunakan Jackson di Java? Sep 12, 2023 am 11:57 AM

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

Cara menggunakan pensirilan Jackson untuk mencapai penyahpekaan data di Jawa Cara menggunakan pensirilan Jackson untuk mencapai penyahpekaan data di Jawa Apr 18, 2023 am 09:46 AM

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

Bila hendak menggunakan anotasi @ConstructorProperties apabila menggunakan Jackson di Jawa? Bila hendak menggunakan anotasi @ConstructorProperties apabila menggunakan Jackson di Jawa? Aug 27, 2023 pm 08:53 PM

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

See all articles