Heim Java javaLernprogramm Tutorial zur Verwendung von Jackson zum Konvertieren von Java-Objekten in JSON und umgekehrt

Tutorial zur Verwendung von Jackson zum Konvertieren von Java-Objekten in JSON und umgekehrt

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); 
  } 
}
Nach dem Login kopieren

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); 
  } 
}
Nach dem Login kopieren

 
二、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()); 
  }
Nach dem Login kopieren

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; 
    } 
  }
Nach dem Login kopieren

(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")); 
  }
Nach dem Login kopieren

 (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()); 
  }
Nach dem Login kopieren

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)); 
  }
Nach dem Login kopieren

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(); 
 
  } 
 
}
Nach dem Login kopieren

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CSV mithilfe der Jackson-Bibliothek in Java in JSON konvertieren? CSV mithilfe der Jackson-Bibliothek in Java in JSON konvertieren? Aug 18, 2023 pm 11:49 PM

AJackson ist eine Java-JSON-API, die verschiedene Möglichkeiten zur Verarbeitung von JSON bietet. Wir können CSV-Daten in JSON-Daten konvertieren, indem wir die CsvMapper-Klasse verwenden, einen speziellen ObjectMapper mit erweiterter Funktionalität zum Konvertieren von POJOs in CsvSchema-Instanzen. Mit der Methode read() können wir einen ObjectReader mit Standardeinstellungen erstellen. Zum Konvertieren müssen wir com.fasterxml.jac importieren

So lösen Sie das Problem der Angabe der Jackson-Version beim SpringBoot-Upgrade So lösen Sie das Problem der Angabe der Jackson-Version beim SpringBoot-Upgrade May 12, 2023 pm 02:13 PM

[Schwachstellenhinweis] Am 19. Februar veröffentlichte NVD einen Sicherheitshinweis, in dem eine Sicherheitslücke (CVE-2020-8840) zur Remotecodeausführung in jackson-databind offengelegt wurde, die durch JNDI-Injection mit einem CVSS-Score von 9,8 verursacht wurde. Der betroffenen Version von jackson-databind fehlen bestimmte xbean-reflect/JNDI-Blacklist-Klassen, wie z. B. org.apache.xbean.propertyeditor.JndiConverter, was dazu führen kann, dass Angreifer JNDI-Injection verwenden, um eine Remotecodeausführung zu erreichen. Derzeit hat der Hersteller eine neue Version veröffentlicht, um die Schwachstellenbehebung abzuschließen. Relevante Benutzer werden gebeten, zum Schutz rechtzeitig ein Upgrade durchzuführen. Da das S im Projekt verwendet wird

Wie konvertiere ich ein JSON-Objekt mit Jackson in einen Enum-Typ in Java? Wie konvertiere ich ein JSON-Objekt mit Jackson in einen Enum-Typ in Java? Sep 05, 2023 pm 12:13 PM

JSONObject kann Text in einer Zeichenfolge analysieren, um ein Objekt vom Typ Map zu generieren. Aufzählungen können verwendet werden, um Sammlungen von Konstanten zu definieren. Wir können Aufzählungen verwenden, wenn wir eine vordefinierte Liste von Werten benötigen, die keine numerischen oder Textdaten darstellen. Mit der Methode readValue() der Klasse ObjectMapper können wir ein JSON-Objekt in eine Aufzählung umwandeln. Im folgenden Beispiel können wir die Jackson-Bibliothek verwenden, um ein JSON-Objekt in eine Java-Enumeration zu konvertieren/deserialisieren. Beispiel importcom.fasterxml.jackson.databind.*;publicclassJSONToEnumTest{ &

POJO mithilfe der Jackson-Bibliothek in Java in XML konvertieren? POJO mithilfe der Jackson-Bibliothek in Java in XML konvertieren? Sep 18, 2023 pm 02:21 PM

Jackson ist eine Java-basierte Bibliothek, die zum Konvertieren von Java-Objekten in JSON und JSON in Java-Objekte nützlich ist. JacksonAPI ist schneller als andere APIs, benötigt weniger Speicherbereich und eignet sich für große Objekte. Wir verwenden die Methode writeValueAsString() der Klasse XmlMapper, um das POJO in das XML-Format zu konvertieren. Die entsprechende POJO-Instanz muss als Parameter an diese Methode übergeben werden. Syntax publicStringwriteValueAsString(Objectvalue)throwsJsonProcessingExceptionExampleimp

XML mit der Jackson-Bibliothek in Java in POJO konvertieren? XML mit der Jackson-Bibliothek in Java in POJO konvertieren? Aug 30, 2023 am 10:21 AM

Der JSON Jackson ist eine Bibliothek für Java. Er verfügt über sehr leistungsstarke Datenbindungsfunktionen und stellt ein Framework bereit, um benutzerdefinierte Java-Objekte in JSON zu serialisieren und JSON zurück in ein Java-Objekt zu deserialisieren. Mithilfe der readValue()-Methode des XMLMappers können wir auch ein XML-Format in das POJO-Objekt konvertieren

Wie erhalte ich die Standardeinstellungen von JSONParser mit Jackson in Java? Wie erhalte ich die Standardeinstellungen von JSONParser mit Jackson in Java? Sep 12, 2023 am 11:57 AM

Die Standardeinstellungen für alle JSON-Parser können mithilfe der JsonParser.Feature-Enumeration dargestellt werden. JsonParser.Feature.values() gibt alle für JSONParser verfügbaren Funktionen zurück, aber ob eine Funktion für einen bestimmten Parser aktiviert oder deaktiviert ist, kann mit der isEnabled()-Methode von JsonParser ermittelt werden. Syntax publicstaticenumJsonParser.FeatureextendsEnum<JsonParser.Feature>Beispiel importcom.fas

So verwenden Sie die Jackson-Serialisierung, um eine Datendesensibilisierung in Java zu erreichen So verwenden Sie die Jackson-Serialisierung, um eine Datendesensibilisierung in Java zu erreichen Apr 18, 2023 am 09:46 AM

1. Hintergrund: Einige vertrauliche Informationen im Projekt können nicht direkt angezeigt werden, z. B. Mobiltelefonnummern, Ausweise, Nummernschilder und andere Informationen. Daten müssen bei der Anzeige desensibilisiert werden, um den Verlust der Privatsphäre des Kunden zu verhindern. Unter Desensibilisierung versteht man die Behandlung eines Teils der Daten mit Desensibilisierungssymbolen (*). 2. Wenn das Ziel Daten vom Server zurückgibt, verwenden Sie die Jackson-Serialisierung, um die Desensibilisierung der Daten abzuschließen und eine desensibilisierte Anzeige vertraulicher Informationen zu erreichen. Reduzieren Sie die Anzahl wiederholter Entwicklungen und verbessern Sie die Entwicklungseffizienz, um einheitliche und effektive Desensibilisierungsregeln zu erstellen. Dies kann auf der Desensibilisierungsmethode zum Umschreiben der Standard-Desensibilisierungsimplementierung basieren, um die Desensibilisierungsanforderungen skalierbarer und anpassbarer personalisierter Geschäftsszenarien zu erfüllen Basierend auf Jackson Custom desensibilisierte Serialisierungsimplementierung von StdSerializer: alle Standard

Wann sollte die Annotation @ConstructorProperties verwendet werden, wenn Jackson in Java verwendet wird? Wann sollte die Annotation @ConstructorProperties verwendet werden, wenn Jackson in Java verwendet wird? Aug 27, 2023 pm 08:53 PM

Die Annotation @ConstructorProperties stammt aus dem Paket java.bean und wird verwendet, um JSON über einen annotierten Konstruktor in Java-Objekte zu deserialisieren. Diese Anmerkung wird ab Jackson 2.7 unterstützt. Die Funktionsweise dieser Annotation ist sehr einfach: Anstatt jeden Parameter im Konstruktor mit Anmerkungen zu versehen, können wir ein Array bereitstellen, das die Eigenschaftsnamen für jeden Konstruktorparameter enthält. Syntax@Documented@Target(value=CONSTRUCTOR)@Retention(value=RUNTIME)public@interfaceConstructorPropertiesExample impo

See all articles