


Tutorial zur Verwendung von Jackson zum Konvertieren von Java-Objekten in JSON und umgekehrt
一、入门
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中文网!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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

[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

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

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

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

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

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

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
