java jackson2.6_Jackson 2 - Convert Java Object to JSON and JSON String to Object

本文档展示了如何使用Jackson库在Java中将Java对象转换为JSON字符串,以及如何将JSON字符串反序列化回Java对象。主要涉及ObjectMapper类的writeValueAsString()和readValue()方法。
摘要由CSDN通过智能技术生成

在本教程中,我们将学习使用将JSON转换为Java对象 – 并将Java对象转换为JSON 。

1. Jackson 2 maven dependency

要将Jackson 2库包含在您的项目中,请在pom.xml中包含以下依赖项。

com.fasterxml.jackson.core

jackson-core

2.6.4

您可以从maven site找到可下载的jar文件。

2. Convert Java object to JSON example

在简单的pojo对象之间进行转换时,Jackson非常直接。 通常只涉及两个步骤,创建com.fasterxml.jackson.databind.ObjectMapper实例

使用objectMapper.writeValueAsString()方法将pojo转换为JSON//Simple POJO

Employee emp = new Employee(1, "Lokesh Gupta", 34, "India");

//Object mapper instance

ObjectMapper mapper = new ObjectMapper();

//Convert POJO to JSON

String json = mapper.writeValueAsString(emp);

2.1. Java program to convert Java object to JSONpackage com.howtodoinjava.jackson2.example;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerationException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.howtodoinjava.jackson2.example.pojo.Employee;

public class FromJavaPojoToJSON

{

public static void main(String[] args)

{

Employee emp = new Employee(1, "Lokesh Gupta", 34, "India");

ObjectMapper mapper = new ObjectMapper();

try

{

String json = mapper.writeValueAsString(emp);

System.out.println(json);

//Use pretty print for printing the output

String beutifulJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);

System.out.println(beutifulJson);

} catch (JsonGenerationException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}Output:

{"id":1,"name":"Lokesh Gupta","age":34,"location":"India"}

{

"id" : 1,

"name" : "Lokesh Gupta",

"age" : 34,

"location" : "India"

}

这里使用的POJO对象是:package com.howtodoinjava.jackson2.example.pojo;

public class Employee

{

private Integer id;

private String name;

private Integer age;

private String location;

public Employee(Integer id, String name, Integer age, String location) {

super();

this.id = id;

this.name = name;

this.age = age;

this.location = location;

}

//Setters and Getters will be added here

@Override

public String toString() {

return "Employee [id=" + id + ", name=" + name + ", age=" + age

+ ", location=" + location + "]";

}

}

3. Convert JSON to Java object example

就像上面的示例一样,从JSON到POJO的转换也仅涉及两个步骤,创建com.fasterxml.jackson.databind.ObjectMapper实例

使用objectMapper.readValue()方法将JSON转换为POJO

e.g.//JSON input

String json = "{\"id\":1,\"name\":\"Lokesh Gupta\",\"age\":34,\"location\":\"India\"}";

//Object mapper instance

ObjectMapper mapper = new ObjectMapper();

//Convert JSON to POJO

Employee emp = mapper.readValue(json, Employee.class);

我们可以在Java中读取json文件,并将其传递给jackson库。

3.1. Java program to convery JSON to Java objectpackage com.howtodoinjava.jackson2.example;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerationException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.howtodoinjava.jackson2.example.pojo.Employee;

public class FromJSONToPOJO {

public static void main(String[] args) {

String json = "{\"id\":1,\"name\":\"Lokesh Gupta\",\"age\":34,\"location\":\"India\"}";

ObjectMapper mapper = new ObjectMapper();

try

{

Employee emp = mapper.readValue(json, Employee.class);

System.out.println(emp);

}

catch (JsonGenerationException e)

{

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Program Output.Employee [id=1, name=Lokesh Gupta, age=34, location=India]

Please do not forget to add a default connstructor in POJO class, otherwise you will get this error:com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.howtodoinjava.jackson2.example.pojo.Employee]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)

at [Source: {"id":1,"name":"Lokesh Gupta","age":34,"location":"India"}; line: 1, column: 2]

at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)

at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1106)

at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:296)

at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:133)

at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)

at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2726)

at com.howtodoinjava.jackson2.example.FromJSONToPOJO.main(FromJSONToPOJO.java:18)

这就是使用Jackson 2库将Java对象转换为JSON并将JSON字符串转换为Java对象的所有示例。

让我知道您是否对如何将json对象转换为java对象有任何疑问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Jackson 库删除 JSON 元素的过程如下: 1. 将 JSON 字符串转换为 JsonNode 对象。可以使用 ObjectMapper 类的 readTree() 方法来实现。例如: ``` ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(jsonString); ``` 这里的 `jsonString` 是包含 JSON 数据的字符串。 2. 找到要删除的元素,并将其删除。可以使用 JsonNode 的 findValue() 方法或者 findPath() 方法来获取元素,再使用 removeAll() 方法将其删除。例如: ``` JsonNode nodeToRemove = rootNode.findValue("elementName"); ((ObjectNode)nodeToRemove.getParent()).removeAll(); ``` 这里的 `"elementName"` 是需要删除的元素名称。`findValue()` 方法返回的是包含该元素的 JsonNode 对象,`getParent()` 方法返回的是该 JsonNode 对象的父节点,`removeAll()` 方法将该 JsonNode 对象及其子节点全部删除。 3. 最后,将修改后的 JsonNode 对象转换回 JSON 字符串。可以使用 ObjectMapper 类的 writeValueAsString() 方法来实现。例如: ``` String newJsonString = objectMapper.writeValueAsString(rootNode); ``` 这里的 `newJsonString` 是删除元素后得到的新的 JSON 字符串。 需要注意的是,如果要删除的元素在 JSON 中存在多个,上述代码只会删除其中一个。如果需要删除所有匹配的元素,可以将上述代码放在一个循环中,直到所有匹配的元素全部删除为止。 另外,如果出现内存溢出的问题,可能是因为 JSON 数据量太大,导致 JsonNode 对象占用的内存过高。可以考虑使用流式 API(Streaming API)来解析 JSON 数据,以降低内存消耗。需要注意的是,使用流式 API 会牺牲一定的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值