javascript
Java - Jackson JSON Java Parser API
文章目錄
- 概述
- 依賴
- Jackson JSON示例
- 基礎(chǔ)數(shù)據(jù)
- JSON轉(zhuǎn)換為Java對(duì)象
- Jackson JSON –將JSON轉(zhuǎn)換為Map
概述
Jackson JSON Java Parser非常流行,并且也用于Spring框架。
Jackson JSON Parser API提供了將JSON轉(zhuǎn)換為POJO對(duì)象的簡(jiǎn)便方法,并支持從JSON數(shù)據(jù)輕松轉(zhuǎn)換為Map。
Jackson也支持泛型,并直接將它們從JSON轉(zhuǎn)換為對(duì)象。
依賴
要在我們的項(xiàng)目中使用Jackson JSON Java API,我們可以將其添加到項(xiàng)目構(gòu)建路徑中
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.2.3</version> </dependency>jackson-databind jar依賴于jackson-core和jackson-annotations庫(kù),因此,如果直接將它們添加到構(gòu)建路徑,請(qǐng)確保將所有三個(gè)添加在一起,否則會(huì)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤。
Jackson JSON示例
基礎(chǔ)數(shù)據(jù)
對(duì)于從JSON到POJO / Java對(duì)象轉(zhuǎn)換的示例,我們將使用一個(gè)嵌套對(duì)象和數(shù)組的復(fù)雜示例。、
我們將在Java對(duì)象中使用數(shù)組,列表和Map進(jìn)行轉(zhuǎn)換。 json存儲(chǔ)在文件employee.txt中,其結(jié)構(gòu)如下
{"id": 123,"name": "Pankaj","permanent": true,"address": {"street": "Albany Dr","city": "San Jose","zipcode": 95129},"phoneNumbers": [123456,987654],"role": "Manager","cities": ["Los Angeles","New York"],"properties": {"age": "29 years","salary": "1000 USD"} }有以下與json數(shù)據(jù)相對(duì)應(yīng)的java類。
【Address 】
public class Address {private String street;private String city;private int zipcode;public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public int getZipcode() {return zipcode;}public void setZipcode(int zipcode) {this.zipcode = zipcode;}@Overridepublic String toString(){return getStreet() + ", "+getCity()+", "+getZipcode();}【Employee 】
import java.util.Arrays; import java.util.List; import java.util.Map;public class Employee {private int id;private String name;private boolean permanent;private Address address;private long[] phoneNumbers;private String role;private List<String> cities;private Map<String, String> properties;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isPermanent() {return permanent;}public void setPermanent(boolean permanent) {this.permanent = permanent;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public long[] getPhoneNumbers() {return phoneNumbers;}public void setPhoneNumbers(long[] phoneNumbers) {this.phoneNumbers = phoneNumbers;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}public List<String> getCities() {return cities;}public void setCities(List<String> cities) {this.cities = cities;}public Map<String, String> getProperties() {return properties;}public void setProperties(Map<String, String> properties) {this.properties = properties;}@Overridepublic String toString(){StringBuilder sb = new StringBuilder();sb.append("***** Employee Details *****\n");sb.append("ID="+getId()+"\n");sb.append("Name="+getName()+"\n");sb.append("Permanent="+isPermanent()+"\n");sb.append("Role="+getRole()+"\n");sb.append("Phone Numbers="+Arrays.toString(getPhoneNumbers())+"\n");sb.append("Address="+getAddress()+"\n");sb.append("Cities="+Arrays.toString(getCities().toArray())+"\n");sb.append("Properties="+getProperties()+"\n");sb.append("*****************************");return sb.toString();} }Employee是代表根json對(duì)象的Java bean。現(xiàn)在,讓我們看看如何使用Jackson JSON解析器API將JSON轉(zhuǎn)換為Java對(duì)象
JSON轉(zhuǎn)換為Java對(duì)象
import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.node.ObjectNode; import com.journaldev.jackson.model.Address; import com.journaldev.jackson.model.Employee;public class JacksonObjectMapperExample {public static void main(String[] args) throws IOException {//read json file data to Stringbyte[] jsonData = Files.readAllBytes(Paths.get("employee.txt"));//create ObjectMapper instanceObjectMapper objectMapper = new ObjectMapper();//convert json string to objectEmployee emp = objectMapper.readValue(jsonData, Employee.class);System.out.println("Employee Object\n"+emp);//convert Object to json stringEmployee emp1 = createEmployee();//configure Object mapper for pretty printobjectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);//writing to console, can write to any output stream such as fileStringWriter stringEmp = new StringWriter();objectMapper.writeValue(stringEmp, emp1);System.out.println("Employee JSON is\n"+stringEmp);}public static Employee createEmployee() {Employee emp = new Employee();emp.setId(100);emp.setName("David");emp.setPermanent(false);emp.setPhoneNumbers(new long[] { 123456, 987654 });emp.setRole("Manager");Address add = new Address();add.setCity("Bangalore");add.setStreet("BTM 1st Stage");add.setZipcode(560100);emp.setAddress(add);List<String> cities = new ArrayList<String>();cities.add("Los Angeles");cities.add("New York");emp.setCities(cities);Map<String, String> props = new HashMap<String, String>();props.put("salary", "1000 Rs");props.put("age", "28 years");emp.setProperties(props);return emp;}}輸出
Employee Object ***** Employee Details ***** ID=123 Name=Pankaj Permanent=true Role=Manager Phone Numbers=[123456, 987654] Address=Albany Dr, San Jose, 95129 Cities=[Los Angeles, New York] Properties={age=29 years, salary=1000 USD} ***************************** Employee JSON is //printing same as above json file datacom.fasterxml.jackson.databind.ObjectMapper是Jackson API中最重要的類,它提供readValue()和writeValue()方法以將JSON轉(zhuǎn)換為Java Object以及將Java Object轉(zhuǎn)換為JSON。
ObjectMapper類可以重用,并且可以將其作為Singleton對(duì)象初始化一次。有很多重載版本的readValue()和writeValue()方法可用于字節(jié)數(shù)組,File,輸入/輸出流和Reader / Writer對(duì)象。
Jackson JSON –將JSON轉(zhuǎn)換為Map
在data.txt文件中有一個(gè)如下所示的JSON對(duì)象:
{"name": "David","role": "Manager","city": "Los Angeles" }2.2 Jackson JSON –讀取特定的JSON密鑰
2.3 Jackson JSON –編輯JSON文檔
2.4 Jackson JSON流API示例
總結(jié)
以上是生活随笔為你收集整理的Java - Jackson JSON Java Parser API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java8 - 一文搞定Fork/Joi
- 下一篇: Apache Kafka-Spring