Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java - Jackson JSON Java Parser API

Java - Jackson JSON Java Parser API

作者头像
小小工匠
发布于 2021-08-17 08:59:39
发布于 2021-08-17 08:59:39
89400
代码可运行
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构
运行总次数:0
代码可运行


概述

Jackson JSON Java Parser非常流行,并且也用于Spring框架。

Jackson JSON Parser API提供了将JSON转换为POJO对象的简便方法,并支持从JSON数据轻松转换为Map。

Jackson也支持泛型,并直接将它们从JSON转换为对象。


依赖

要在我们的项目中使用Jackson JSON Java API,我们可以将其添加到项目构建路径中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.2.3</version>
</dependency>

jackson-databind jar依赖于jackson-core和jackson-annotations库,因此,如果直接将它们添加到构建路径,请确保将所有三个添加在一起,否则会出现运行时错误。


Jackson JSON示例

基础数据

对于从JSON到POJO / Java对象转换的示例,我们将使用一个嵌套对象和数组的复杂示例。、

我们将在Java对象中使用数组,列表和Map进行转换。 json存储在文件employee.txt中,其结构如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "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数据相对应的java类。

【Address 】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
	}
	
	@Override
	public String toString(){
		return getStreet() + ", "+getCity()+", "+getZipcode();
	}

【Employee 】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
	}

	@Override
	public 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对象的Java bean。现在,让我们看看如何使用Jackson JSON解析器API将JSON转换为Java对象

JSON转换为Java对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 String
		byte[] jsonData = Files.readAllBytes(Paths.get("employee.txt"));
		
		//create ObjectMapper instance
		ObjectMapper objectMapper = new ObjectMapper();
		
		//convert json string to object
		Employee emp = objectMapper.readValue(jsonData, Employee.class);
		
		System.out.println("Employee Object\n"+emp);
		
		//convert Object to json string
		Employee emp1 = createEmployee();
		//configure Object mapper for pretty print
		objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
		
		//writing to console, can write to any output stream such as file
		StringWriter 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;
	}

}

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 data

com.fasterxml.jackson.databind.ObjectMapper是Jackson API中最重要的类,它提供readValue()writeValue()方法以将JSON转换为Java Object以及将Java Object转换为JSON。

ObjectMapper类可以重用,并且可以将其作为Singleton对象初始化一次。有很多重载版本的readValue()和writeValue()方法可用于字节数组,File,输入/输出流和Reader / Writer对象。


Jackson JSON –将JSON转换为Map

在data.txt文件中有一个如下所示的JSON对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "David",
  "role": "Manager",
  "city": "Los Angeles"
}

2.2 Jackson JSON –读取特定的JSON密钥 2.3 Jackson JSON –编辑JSON文档 2.4 Jackson JSON流API示例

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP-FPM RCE (CVE-2019-11043)
安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。当 Nginx 将包含 PATH_INFO 为空的参数通过 FastCGI 传递给 PHP-FPM 时,PHP-FPM 接收处理的过程中存在逻辑问题。通过精心构造恶意请求可以对 PHP-FPM 进行内存污染,进一步可以复写内存并修改 PHP-FPM 配置,实现远程代码执行。
wywwzjj
2023/05/09
1K0
PHP-FPM RCE (CVE-2019-11043)
LAMP-PHP-fpm服务器配置
yum -y groupinstall "Desktop Platform Development"
星哥玩云
2022/07/01
1.2K0
LAMP-PHP-fpm服务器配置
PHP-fpm 远程代码执行漏洞(CVE-2019-11043)分析
国外安全研究员 Andrew Danau在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常,疑似存在漏洞。
知道创宇云安全
2019/10/28
1.2K0
PHP-fpm 远程代码执行漏洞(CVE-2019-11043)分析
PHP-FPM 性能配置优化
php-fpm 全称是 PHP FastCGI Process Manager 的简称,从名字可得知,是一个 FastCGI 的管理器。
南山竹
2024/06/12
1810
PHP-FPM 性能配置优化
LNMP架构介绍、安装PHP(php-fpm)
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。
阿dai学长
2019/04/03
1.9K0
fpm源码阅读(1)
FastCGI是Web服务器(如:Nginx、Apache)和处理程序之间的一种通信协议,它是与Http类似的一种应用层通信协议,注意:它只是一种协议!
golangLeetcode
2022/08/02
4860
Centos7 安装配置 PHP7 Nginx 并部署开源后台系统Fasadmin
1、查看是否安装过Nginx rpm -qa|grep -E "nginx" 2、安装Nginx前需要提前安装以下这些依赖 2.1、查看gcc版本 gcc -v 若有内容输出说明已安装了gcc。否则,需使用以下命令进行安装。 yum -y install gcc 2.2、pcre、pcre-devel安装 yum install -y pcre pcre-devel 2.3、zlib安装 yum install -y zlib zlib-devel 2.4、安装openssl yum ins
游离于山间之上的Java爱好者
2022/09/21
4850
Centos7 安装配置 PHP7 Nginx 并部署开源后台系统Fasadmin
PHP-FPM
PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
友儿
2022/09/11
9140
CVE-2019-11043: PHP 7 RCE漏洞分析
研究人员在PHP 7中找出有个远程代码执行(RCE)漏洞,该漏洞CVE编号为CVE-2019-11043。攻击者利用该漏洞只需要访问通过精心伪造的URL就可以在服务器上运行命令。
猿哥
2019/10/29
2.1K0
LNMP之Php的安装配置
此配置的编译参数是: ./configure --prefix=/opt/php7.2.3 --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-libxml-dir --enable-soap --enable-sockets --with-xmlrpc --with-iconv-dir
用户1173509
2018/03/28
2K0
LNMP之Php的安装配置
CVE-2019-11043PHP-FPM在Nginx特定配置下远程代码执行漏洞复现
9月26日,PHP官方发布漏洞通告,提到Nginx与php-fpm服务器上存在的一处高危漏洞,由于Nginx的fastcgi_split_path_info模块在处理带 %0a 的请求时,对换行符 \n 处置不当使得将PATH_INFO值置为空,从而导致可以通过FCGI_PUTENV与PHP_VALUE相结合,修改当前的php-fpm进程中的php配置。在特殊构造的配置生效的情况下可以触发任意代码执行。目前开源社区已有漏洞Poc公开。
墙角睡大觉
2019/10/30
1.3K0
CVE-2019-11043PHP-FPM在Nginx特定配置下远程代码执行漏洞复现
PHP优化设置
1.查询php配置文件 find / -name php.ini 可以输出如下: /etc/php.ini 配置如下: ; Start a new pool named 'www'. ; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following
Zach
2019/12/30
5.9K0
LNMP环境下Nginx中php-fpm的配置文件讲解
一、nginx配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 user nobody nobody; worker_processes 2; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/
老七Linux
2018/05/09
2K1
linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
php-fpm的pool Nginx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket。 vim /usr/local/php/etc/php-fpm.conf 在[global]部分增加: include = etc/php-fpm.d/*.conf 创建php-fpm.d目录: mkdir /usr/local/php/etc/php-fpm.d 进入目录: cd /usr/local/php/etc/php-fp
用户1215343
2018/02/05
7440
linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
【PHP7源码分析】PHP中$_POST揭秘
前几天的工作中,需要通过curl做一次接口测试。让我意外的是,通过$_POST竟然无法获取到Content-Type是application/json的http请求的body参数。 查了下php官网对$_POST的描述,的确是这样。 后来通过file_get_contents("php://input")获取到了原始的http请求body,然后对参数进行json_decode解决了接口测试的问题。事后,脑子里面冒出了挺多问题:
桶哥
2019/06/04
6.3K0
【PHP7源码分析】PHP中$_POST揭秘
12.21 php-fpm的pool
php-fpm的pool目录概要 vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加 include = etc/php-fpm.d/*.conf mkdir /usr/local/php/etc/php-fpm.d/ cd /usr/local/php/etc/php-fpm.d/ vim www.conf //内容如下 [www] listen = /tmp/www.sock listen.mode=666 user = php-fpm group =
运维小白
2018/02/06
1.5K0
[漏洞预警]PHP-FPM在Nginx的特定环境下的任意代码执行漏洞
2019年10月22日在国外上某技术大牛公开了在PHP-FPM中新修补的RCE。
洛米唯熊
2019/10/25
1.2K0
[漏洞预警]PHP-FPM在Nginx的特定环境下的任意代码执行漏洞
php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)
在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送%0a符号时,服务返回异常,疑似存在漏洞。
天钧
2019/11/11
8721
php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)
Web安全 | Fastcgi 协议分析与 PHP-FPM 攻击方法
本文总结了一下 Fastcgi 原理以及攻击方法,若有不当之处还望各位大佬多多指教。
HACK学习
2021/06/24
2.5K0
Web安全 | Fastcgi 协议分析与 PHP-FPM 攻击方法
学习笔记0518----nginx和php-fpm配置
负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称backend)来做复杂的计算、处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网IP地址,并且在业务量增加的时候可以方便地扩容后台服务器。
嘻哈记
2020/11/24
1.8K0
相关推荐
PHP-FPM RCE (CVE-2019-11043)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验