Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
howtodoinjava-zh
提交
73f92139
H
howtodoinjava-zh
项目概览
OpenDocCN
/
howtodoinjava-zh
大约 1 年 前同步成功
通知
1
Star
82
Fork
8
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
howtodoinjava-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
73f92139
编写于
6月 14, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-06-14 16:25:19
上级
366da669
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
217 addition
and
248 deletion
+217
-248
docs/misc2/27.md
docs/misc2/27.md
+1
-248
docs/misc2/SUMMARY.md
docs/misc2/SUMMARY.md
+216
-0
未找到文件。
docs/misc2/27.md
浏览文件 @
73f92139
# Jackson 将对象转换为 json 并将 json 转换为对象
> 原文: [https://howtodoinjava.com/jackson/jackson-convert-object-to-from-json/](https://howtodoinjava.com/jackson/jackson-convert-object-to-from-json/)
**Jackson**
*将对象转换为 JSON*
示例,
*将 json 转换为对象*
示例。 学习使用 jackson
`objectmapper`
从 json 字符串填充 Java 对象,并从 java 对象写入 json 字符串。
Jackson 用于
**将 Java 对象转换为 json**
,并
**将 json 转换为 Java 对象**
。 在这个快速的
**jackson 教程**
中,我给出了将 Java 对象以编程方式转换为 json 的示例。
```
java
Table
of
Contents
1
\
.
Jackson
maven
dependency
2
\
.
Convert
Java
object
to
JSON
3
\
.
Pretty
print
JSON
4
\
.
Convert
JSON
to
Java
object
```
在进入代码示例之前,让我们定义一个简单的 pojo 类,我们将在此示例中使用该类进行转换。
```
java
public
class
Employee
{
private
Integer
id
;
private
String
firstName
;
private
String
lastName
;
public
Employee
(){
}
public
Employee
(
Integer
id
,
String
firstName
,
String
lastName
,
Date
birthDate
){
this
.
id
=
id
;
this
.
firstName
=
firstName
;
this
.
lastName
=
lastName
;
}
//Getters and setters
@Override
public
String
toString
()
{
return
"Employee [id="
+
id
+
", firstName="
+
firstName
+
", "
+
"lastName="
+
lastName
+
"]"
;
}
}
```
## 1.Jackson 依赖
您可以通过两种方式添加 Jackson 依赖项,具体取决于您的项目类型。
#### 1.1 基于 Maven 的项目
在
`pom.xml`
文件中添加以下依赖项。
```
java
<
dependencies
>
<
dependency
>
<
groupId
>
com
.
fasterxml
.
jackson
.
core
</
groupId
>
<
artifactId
>
jackson
-
core
</
artifactId
>
<
version
>
2.9
.
6
</
version
>
</
dependency
>
</
dependencies
>
```
#### 1.2 对于 ANT 或其他项目类型
对于非 Maven 用例,可以从
[
Maven 中央仓库
](
https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/
)
下载 jar。
## 2.Jackson `ObjectMapper`
`ObjectMapper`
是用于数据绑定的主要 API。 它带有几种读取器/写入器方法,以执行从 Java 到 JSON 的转换。 它将使用
`JsonParser`
和
`JsonGenerator`
的实例来实现 JSON 的实际读取/写入。
#### 2.1 将 json 转换为对象的语法
使用以下示例语法读取 JSON 并填充 Java 对象。
```
java
ObjectMapper
mapper
=
new
ObjectMapper
();
Object
value
=
mapper
.
readValue
(
jsonSource
,
javaObject
);
```
*
`jsonSource`
– 将获取 json 字符串的输入源。
*
`javaObject`
– 需要填充的目标 Java 对象。
#### 2.2 将对象转换为 json 的语法
使用以下示例语法将 Java 对象写入 json 字符串。
```
java
ObjectMapper
mapper
=
new
ObjectMapper
();
Object
value
=
mapper
.
writeValue
(
jsonTarget
,
javaObject
);
```
*
`jsonTarget`
– 将写入 json 字符串的输出目标。
*
`javaObject`
– 需要转换为 json 的源 Java 对象。
## 3\. Jackson 将对象转换为 JSON
要转换雇员对象并将其写入某个文件,可以使用以下代码。
```
java
package
test.jackson
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.Date
;
import
org.codehaus.jackson.JsonGenerationException
;
import
org.codehaus.jackson.map.JsonMappingException
;
import
org.codehaus.jackson.map.ObjectMapper
;
public
class
JavaToJSONExample
{
public
static
void
main
(
String
[]
args
)
{
@SuppressWarnings
(
"deprecation"
)
Employee
employee
=
new
Employee
(
1
,
"Lokesh"
,
"Gupta"
,
new
Date
(
1981
,
8
,
18
));
ObjectMapper
mapper
=
new
ObjectMapper
();
try
{
mapper
.
writeValue
(
new
File
(
"c://temp/employee.json"
),
employee
);
}
catch
(
JsonGenerationException
e
)
{
e
.
printStackTrace
();
}
catch
(
JsonMappingException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
```
程序输出。
```
java
{
"id"
:
1
,
"firstName"
:
"Lokesh"
,
"lastName"
:
"Gupta"
}
```
## 4\. Jackson 精美打印 JSON 输出
如果看上面的输出,那么写在文本文件中的输出是非常原始的并且没有格式化。 您可以使用
`writerWithDefaultPrettyPrinter`
而不是
`defaultPrettyPrintingWriter()`
实例编写格式化的 JSON 内容,如下所示:
```
java
package
test.jackson
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.Date
;
import
org.codehaus.jackson.JsonGenerationException
;
import
org.codehaus.jackson.map.JsonMappingException
;
import
org.codehaus.jackson.map.ObjectMapper
;
public
class
JavaToPrettyJSONExample
{
public
static
void
main
(
String
[]
args
)
{
@SuppressWarnings
(
"deprecation"
)
Employee
employee
=
new
Employee
(
1
,
"Lokesh"
,
"Gupta"
,
new
Date
(
1981
,
8
,
18
));
ObjectMapper
mapper
=
new
ObjectMapper
();
try
{
mapper
.
defaultPrettyPrintingWriter
().
writeValue
(
new
File
(
"c://temp/employee.json"
),
employee
);
}
catch
(
JsonGenerationException
e
)
{
e
.
printStackTrace
();
}
catch
(
JsonMappingException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
```
程序输出:
```
java
{
"id"
:
1
,
"firstName"
:
"Lokesh"
,
"lastName"
:
"Gupta"
}
```
## 5\. Jackson 将 JSON 转换为 Java 对象
要将 json 字符串转换为 java 对象(例如
`Employee`
对象),请使用以下代码:
```
java
package
test.jackson
;
import
java.io.File
;
import
java.io.IOException
;
import
org.codehaus.jackson.JsonGenerationException
;
import
org.codehaus.jackson.map.JsonMappingException
;
import
org.codehaus.jackson.map.ObjectMapper
;
public
class
JSONToJavaExample
{
public
static
void
main
(
String
[]
args
)
{
Employee
employee
=
null
;
ObjectMapper
mapper
=
new
ObjectMapper
();
try
{
employee
=
mapper
.
readValue
(
new
File
(
"c://temp/employee.json"
),
Employee
.
class
);
}
catch
(
JsonGenerationException
e
)
{
e
.
printStackTrace
();
}
catch
(
JsonMappingException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
System
.
out
.
println
(
employee
);
}
}
```
程序输出:
```
java
Employee
[
id
=
1
,
firstName
=
Lokesh
,
lastName
=
Gupta
]
```
确保在 POJO 类中定义了默认的构造器(例如,本例中为
`Employee.java`
)。 Jackson 使用默认构造器通过反射来创建 Java 类的实例。 如果没有提供默认的构造器,那么您将在运行时得到
`JsonMappingException`
。
学习愉快!
\ No newline at end of file
# Jackson 教程
\ No newline at end of file
docs/misc2/SUMMARY.md
0 → 100644
浏览文件 @
73f92139
+
[
JMS 教程
](
2.md
)
+
[
JMS 教程 – Java 消息服务教程
](
3.md
)
+
[
JMS 点对点消息示例
](
4.md
)
+
[
JMS 发布/订阅消息示例
](
5.md
)
+
[
HornetQ 教程
](
6.md
)
+
[
HornetQ 单体 – 基本的 JMS 消息传递示例
](
7.md
)
+
[
使用 Maven 的 HornetQ 独立服务器示例
](
8.md
)
+
[
Spring3 Hornetq 独立集成示例
](
9.md
)
+
[
Gson 教程
](
10.md
)
+
[
Gson 教程
](
11.md
)
+
[
Gson 安装
](
12.md
)
+
[
GSON – 序列化和反序列化 JSON
](
13.md
)
+
[
Gson – JSON 输出的精美打印
](
14.md
)
+
[
GSON – 将 JSON 数组解析为 Java 数组或列表
](
15.md
)
+
[
GSON – 序列化和反序列化 JSON 为集
](
16.md
)
+
[
Gson – 序列化和反序列化包含自定义对象的`HashMap`
](
17.md
)
+
[
Gson – `GsonBuilder`配置示例
](
18.md
)
+
[
Gson - 序列化`NULL`值
](
19.md
)
+
[
Gson `@Since` – 版本支持
](
20.md
)
+
[
Gson `@SerializedName`
](
21.md
)
+
[
Gson – 排除或忽略字段
](
22.md
)
+
[
Gson - `JsonReader`
](
23.md
)
+
[
Gson - `JsonParser`
](
24.md
)
+
[
Gson – 自定义序列化和反序列化
](
25.md
)
+
[
Gson – 快速指南
](
26.md
)
+
[
JAXB 教程
](
28.md
)
+
[
JAXB 注解
](
29.md
)
+
[
JAXB `@XmlRootElement`注解示例
](
30.md
)
+
[
JAXB `@XmlElementWrapper`注释示例
](
31.md
)
+
[
JAXB `Marshaller`(编组器)示例
](
32.md
)
+
[
JAXB `Unmarshaller`(解组器)示例
](
33.md
)
+
[
JAXB 读取 XML 到 Java 对象的示例
](
34.md
)
+
[
使用 Moxy 和 Jaxb 将 JSON 转换为 Java 对象的示例
](
35.md
)
+
[
JAXB 将 Java 对象写入 XML 的示例
](
36.md
)
+
[
JAXB 将对象转换为 JSON 的示例
](
37.md
)
+
[
JAXB – 在 Java 中编组和解组`HashMap`
](
38.md
)
+
[
JAXB – 编组和解组对象列表或集合
](
39.md
)
+
[
使用 Eclipse 从 JAXB Java 类生成 XSD
](
40.md
)
+
[
JAXB 模式验证
](
41.md
)
+
[
[已解决]:`javax.xml.bind.JAXBException`:`java.util.ArrayList`或其任何超类不是此上下文的已知类
](
42.md
)
+
[
[已解决]:线程“`main`”`com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException`中的异常:3 个`IllegalAnnotationExceptions`计数
](
43.md
)
+
[
没有`@XmlRootElement`的 JAXB 编组 – 缺少`@XmlRootElement`错误
](
44.md
)
+
[
不带 jaxb 注解的解组
](
45.md
)
+
[
Jackson 教程
](
27.md
)
+
[
Jackson2 – 将 Java 对象转换为 JSON,并将 JSON 字符串转换为对象
](
46.md
)
+
[
Jackson 将对象转换为 json 并将 json 转换为对象
](
47.md
)
+
[
Jackson – 将 JSON 转换为`Map`并将`Map`转换为 JSON
](
48.md
)
+
[
Java XML 教程
](
49.md
)
+
[
Java 读取 XML – Java DOM 解析器示例
](
50.md
)
+
[
Java SAX 解析器 – 读取 XML 的示例
](
51.md
)
+
[
Java JDOM2 – 阅读 XML 示例
](
52.md
)
+
[
使用 Java StAX 解析器读取 XML – 游标和迭代器 API
](
53.md
)
+
[
DOM 与 Java 中的 SAX 解析器
](
54.md
)
+
[
Java 将 XML 转换为属性 – 从 XML 文件读取属性
](
55.md
)
+
[
Java 将属性文件转换为 XML 文件
](
56.md
)
+
[
Java 字符串到 XML – 将字符串解析为 XML DOM 示例
](
57.md
)
+
[
Java XML 转换为字符串 – 将 XML 对象写入文件示例
](
58.md
)
+
[
Java XPath 示例 – XPath 教程
](
59.md
)
+
[
Java xpath 示例 – 在 xml 文件上求值 xpath
](
60.md
)
+
[
Java8 xpath 示例 – 在字符串上求值 xpath
](
61.md
)
+
[
Java XPath 表达式示例
](
62.md
)
+
[
Java XPath `NamespaceContext` – 命名空间解析示例
](
63.md
)
+
[
Java XPath 从 XML 获取属性值
](
64.md
)
+
[
在 Java 中使用 xpath 查找具有属性值的 xml 元素
](
65.md
)
+
[
Java XPath – 检查节点或属性是否存在?
](
66.md
)
+
[
Eclipse 教程
](
67.md
)
+
[
在 Eclipse 中导入 Maven 远程原型目录
](
68.md
)
+
[
使用 Eclipse 快速搜索插件进行更快的文本搜索
](
69.md
)
+
[
如何在 Eclipse 中显示非英文 unicode(例如中文)字符
](
70.md
)
+
[
如何在 Eclipse 中增加控制台输出限制
](
71.md
)
+
[
创建 Eclipse 模板以加快 Java 编程
](
72.md
)
+
[
在 5 分钟内使 Eclipse 更快
](
73.md
)
+
[
如何在印地语中编译和运行 Java 程序
](
74.md
)
+
[
Java 覆盖最终静态方法 – 方法是覆盖还是隐藏?
](
75.md
)
+
[
[已解决] 在 Eclipse 的 Java 构建路径中找不到超类“`javax.servlet.http.HttpServlet`”
](
76.md
)
+
[
版本控制系统教程
](
77.md
)
+
[
分布式版本控制系统如何工作?
](
78.md
)
+
[
版本控制系统(VCS)如何工作?
](
79.md
)
+
[
如何从 Google Code 项目中签出源代码
](
80.md
)
+
[
Tomcat 教程
](
81.md
)
+
[
Tomcat – 架构和`server.xml`配置
](
82.md
)
+
[
如何在默认的 HTTP 端口 80 中运行 tomcat
](
83.md
)
+
[
Tomcat – 启用/禁用目录列表
](
84.md
)
+
[
Tomcat SSL 或 HTTPS 配置示例
](
85.md
)
+
[
通过单个服务器安装运行 Tomcat 的多个实例
](
86.md
)
+
[
Tomcat Maven 插件示例
](
87.md
)
+
[
Spring,Tomcat – 获取负载均衡器后面的真实 IP
](
88.md
)
+
[
Web 服务器如何工作?
](
89.md
)
+
[
Linux 教程
](
90.md
)
+
[
JStack 线程转储分析器
](
91.md
)
+
[
使用 Java 在 Linux 中管理系统日志文件不超过 N GB
](
92.md
)
+
[
Swagger – Spring REST 示例
](
93.md
)
+
[
GoF 设计模式
](
94.md
)
+
[
设计模式
](
95.md
)
+
[
创建型设计模式
](
96.md
)
+
[
Java 单例模式介绍
](
97.md
)
+
[
Java 中的构建器设计模式
](
98.md
)
+
[
Java 工厂模式说明
](
99.md
)
+
[
抽象工厂模式解释
](
100.md
)
+
[
Java 中的原型设计模式
](
101.md
)
+
[
行为型设计模式
](
102.md
)
+
[
责任链设计模式
](
103.md
)
+
[
命令设计模式
](
104.md
)
+
[
迭代器设计模式
](
105.md
)
+
[
中介者设计模式
](
106.md
)
+
[
备忘录设计模式
](
107.md
)
+
[
观察者设计模式
](
108.md
)
+
[
状态设计模式
](
109.md
)
+
[
策略设计模式
](
110.md
)
+
[
模板方法设计模式
](
111.md
)
+
[
访问者设计模式示例
](
112.md
)
+
[
结构型设计模式
](
113.md
)
+
[
Java 中的适配器设计模式
](
114.md
)
+
[
桥接设计模式
](
115.md
)
+
[
组合设计模式
](
116.md
)
+
[
Java 中的装饰器设计模式
](
117.md
)
+
[
外观设计模式
](
118.md
)
+
[
享元设计模式
](
119.md
)
+
[
代理设计模式
](
120.md
)
+
[
设计原则
](
121.md
)
+
[
Java 中的 SOLID 原则(含示例)
](
122.md
)
+
[
开闭原则
](
123.md
)
+
[
单一责任原则
](
124.md
)
+
[
Java 最佳实践
](
125.md
)
+
[
Java 最佳实践指南
](
126.md
)
+
[
编写好的单元测试的 FIRST 原则
](
127.md
)
+
[
您应该如何对 DAO 层进行单元测试
](
128.md
)
+
[
JUnit 最佳实践指南
](
129.md
)
+
[
不良单元测试用例的 8 个迹象
](
130.md
)
+
[
20 个 Java 异常处理最佳实践
](
131.md
)
+
[
13 个编写 Spring 配置文件的最佳实践
](
132.md
)
+
[
Java Web 应用性能改进技巧
](
133.md
)
+
[
Java 算法
](
134.md
)
+
[
Java 算法和实现
](
135.md
)
+
[
冒泡排序 Java 示例
](
136.md
)
+
[
插入排序 Java 示例
](
137.md
)
+
[
归并排序 Java 示例
](
138.md
)
+
[
快速排序 Java 示例
](
139.md
)
+
[
选择排序 Java 示例
](
140.md
)
+
[
Java AES 加密解密示例
](
141.md
)
+
[
使用 Soundex 算法实现语音搜索
](
142.md
)
+
[
Java 比较和交换示例 – CAS 算法
](
143.md
)
+
[
Python 教程
](
144.md
)
+
[
Python 教程
](
145.md
)
+
[
如何在 Sublime 编辑器中安装 Python 包
](
146.md
)
+
[
Python – 注释
](
147.md
)
+
[
Python – 变量
](
148.md
)
+
[
Python – 数据类型
](
149.md
)
+
[
Python – 关键字
](
150.md
)
+
[
Python – 字符串
](
151.md
)
+
[
Python – 列表
](
152.md
)
+
[
Python – 元组
](
153.md
)
+
[
Python `max()`和`min()`– 在列表或数组中查找最大值和最小值
](
154.md
)
+
[
Python 找到 N 个最大的或最小的项目
](
155.md
)
+
[
Python 读写 CSV 文件
](
156.md
)
+
[
Python `httplib2` – HTTP GET 和 POST 示例
](
157.md
)
+
[
Python 将元组解包为变量或参数
](
158.md
)
+
[
Python 解包元组 – 太多值无法解包
](
159.md
)
+
[
Python 多重字典示例 – 将单个键映射到字典中的多个值
](
160.md
)
+
[
Python `OrderedDict` – 有序字典
](
161.md
)
+
[
Python 字典交集 – 比较两个字典
](
162.md
)
+
[
Python 优先级队列示例
](
163.md
)
+
[
RxJava 教程
](
164.md
)
+
[
完整的 Java Servlet 教程
](
165.md
)
+
[
vaadin 教程
](
166.md
)
+
[
使用 Maven 的 vaadin HelloWorld Web 应用
](
167.md
)
+
[
Vaadin `ComboBox`示例
](
168.md
)
+
[
vaadin 文本字段示例
](
169.md
)
+
[
Vaadin Spring Security BasicAuth 示例
](
170.md
)
+
[
SQL 教程
](
171.md
)
+
[
SQL – 不使用临时表删除重复行
](
172.md
)
+
[
查找员工的第 N 高薪的 SQL 查询
](
173.md
)
+
[
`SQLException`:用户`root@localhost`的访问被拒绝
](
174.md
)
+
[
Struts2 教程
](
175.md
)
+
[
Struts2 HelloWorld 示例
](
176.md
)
+
[
Struts2 HelloWorld 注解示例
](
177.md
)
+
[
使用`@InterceptorRef`的 Struts2 自定义拦截器示例
](
178.md
)
+
[
Struts2 – 如何正确设置结果路径
](
179.md
)
+
[
Spring4 + Struts2 + Hibernate 集成教程
](
180.md
)
+
[
[已解决] 无法找到`ref-name`引用的拦截器类
](
181.md
)
+
[
[已解决]:找不到扩展名`properties`或`xml`的结果类型
](
182.md
)
+
[
数据结构教程
](
183.md
)
+
[
使用数组的 Java 栈实现
](
184.md
)
+
[
Java 中的自定义列表实现示例
](
185.md
)
+
[
HTML5 教程
](
186.md
)
+
[
HTML5 – `<section>`标签示例
](
187.md
)
+
[
HTML5 字符集 – 字符编码声明
](
188.md
)
+
[
HTML5 `DOCTYPE`声明示例
](
189.md
)
+
[
Java 题目
](
190.md
)
+
[
Java 面试题目与答案
](
191.md
)
+
[
Java 中的无效代码和无法访问的代码
](
192.md
)
+
[
Java 字符串回文 – Java 数字回文示例
](
193.md
)
+
[
检测`LinkedList`中的无限循环的示例
](
194.md
)
+
[
复合赋值运算符`i += j`与 Java 中的`i = i + j`不同
](
195.md
)
+
[
Java 中的 HiLo 猜谜游戏
](
196.md
)
+
[
Java 题目 – 查找所有重复的元素
](
197.md
)
+
[
Java 题目 – `TreeMap`的放置操作
](
198.md
)
+
[
题目 – 返回所有字符串中的第 N 长字符串
](
199.md
)
+
[
Java 题目:好的字符串 – 坏的字符串
](
200.md
)
+
[
题目 – 检查字符串是否完整(包含所有字母)
](
201.md
)
+
[
Java 中的反转字符串 - 单词反转字符串
](
202.md
)
+
[
用 Java 计算阶乘的 3 种方法
](
203.md
)
+
[
Java 中的 FizzBuzz 解决方案
](
204.md
)
+
[
从 Java 中的序列/数组中查找缺失的数字
](
205.md
)
+
[
Java – 不使用“`new`”关键字创建对象
](
206.md
)
+
[
面试问题
](
207.md
)
+
[
Java 面试问题
](
208.md
)
+
[
Java 字符串面试问题与答案
](
210.md
)
+
[
Java 核心面试问题 – 第 1 部分
](
211.md
)
+
[
Java 核心面试问题 – 第 2 部分
](
212.md
)
+
[
Java 核心面试问题 – 第 3 部分
](
213.md
)
+
[
Java 面试的 40 个热门问答集
](
214.md
)
+
[
中级开发人员的 Java 面试问题
](
215.md
)
+
[
针对 Oracle 企业管理器项目的实际 Java 面试问题
](
216.md
)
+
[
`HashMap`和`ConcurrentHashMap`面试问题
](
217.md
)
+
[
Java 版本和新特性
](
218.md
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录