JackSon学习笔记(二)

SpringBoot使用Jackson【最全版】 概述:Springboot配置JackSon处理类属性,JavaBean序列化为JSON格式,常用框架:阿里fastjson,谷歌gson、Jackson等。① 性能:Jackson > Fastjson > Gson >同个结构② Jackson、Fastjson、Gson 类库各有特点,各有自己的专长Jackson是spring-boot-starter-json依赖的一部分,spring-boot-starter-web中包含spring-boot-starter-json。 阅读详情

概述

jackson解析json例子

准备工作

基于JDK1.7,依赖Jackson框架类库:

jackson-core-2.5.3.jar
jackson-databind-2.5.3.jar

Example

下面的例子是基于Jackson 2.x版本的树模型的Json解析。

要解析的Json字符串:

String data = {
			"type":2,"range":1,"start":1368417600,"end":1368547140,"cityName":"天津",
			"companyIds":["12000001"],
			"companyNames":["天津"],
			"12000001":{
				"data":[47947,48328,48573,48520],
				"timestamps":[1368417600,1368417900,1368418200,1368418500]
			}
	}

示例代码:

package com.cennavi.dqe.test;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ParseJsonTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String data = "{\"type\":2,\"range\":1,\"start\":1368417600,\"end\":1368547140,"
				+ "\"cityName\":\"天津\",\"companyIds\":[\"12000001\"],\"companyNames\":[\"天津\"],"
				+ "\"12000001\":{\"data\":[47947,48328,48573,48520],"
				+ "\"timestamps\":[1368417600,1368417900,1368418200,1368418500]}}";
		String data2 = parseJson(data);
		System.out.println(data2);
	}

	public static String parseJson(String data) {
		// 用来展现解析Json得到的值
		StringBuffer buf = new StringBuffer();
		try {
			ObjectMapper mapper = new ObjectMapper();
			JsonNode rootNode = mapper.readTree(data); // 读取Json
			// rootNode.path("xx")返回的还是一个JsonNode对象,调用该JsonNode的相应方法,得到键对应的值
			int type = rootNode.path("type").asInt();
			int range = rootNode.path("range").asInt();
			long start = rootNode.path("start").asLong();
			long end = rootNode.path("end").asLong();
			String cityName = rootNode.path("cityName").asText();

			// 转换时间格式
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
			sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));

			String str = "类型(type):" + type + "\r\n" + "范围(range):" + range
					+ "\r\n" + "开始时间(start):"
					+ sdf.format(new Date(start * 1000)) + "\r\n"
					+ "结束时间(end):" + sdf.format(new Date(end * 1000)) + "\r\n"
					+ "城市名称(cityName):" + cityName;
			buf.append(str);
			// 得到companyIds的JsonNode对象
			JsonNode companyIds = rootNode.path("companyIds");
			JsonNode companyNames = rootNode.path("companyNames");

			// 遍历companyIds中的内容
			for (int i = 0; i < companyIds.size(); i++) {
				String companyId = companyIds.get(i).asText();
				// 本例解析的Json字符串中companyIds与companyNames的长度是相同的,所有直接遍历companyNames
				String companyName = companyNames.get(i).asText();
				// companyId的值:12000001,对应Json串中的
				// "12000001":{"data":[...],"timestamps":[....]}
				JsonNode infoNode = rootNode.path(companyId);
				// 得到"12000001":{"data":[...],"timestamps":[....]}中的data和timestamps的JsonNode对象
				JsonNode dataNode = infoNode.path("data");
				JsonNode timestampsNode = infoNode.path("timestamps");
				// 遍历data和timestamps 本例中data.size与timestamps.size是相等的

				buf.append("\r\n{\r\n  公司ID(companyId):" + companyId
						+ "\r\n  公司名称(companyName):" + companyName + "\r\n"
						+ " data:");
				for (int j = 0; j < dataNode.size(); j++) {
					long dataValue = dataNode.get(j).asLong();
					buf.append(dataValue + ",");
				}
				buf.append("\r\n time:");
				for (int k = 0; k < timestampsNode.size(); k++) {
					long timeValue = timestampsNode.get(k).asLong();
					buf.append(sdf.format(new Date(timeValue * 1000)) + ",");
				}
				buf.append("\r\n}\r\n");
			}
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return buf.toString();
	}

}

测试结果:

类型(type):2
范围(range):1
开始时间(start):201305131200
结束时间(end):201305142359
城市名称(cityName):天津
{
  公司ID(companyId):12000001
  公司名称(companyName):天津
  data:47947,48328,48573,48520,
  time:201305131200,201305131205,201305131210,201305131215
}
Jackson的使用与创建Jackson工具类 Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 ,简单易用。与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快;Jacks 阅读详情

相关推荐

高通平台power_supply 框架下添加第三方充电IC的驱动方法

1.power_supply电源框架介绍: power supply framework在kernel/drivers/power/下。内核抽象出来power supply子系统为驱动提供了统一的框架。 功能包括: 1.抽象PSY设备的共性,向用户空间提供统一的API; 2.为底层PSY驱动的编写,提供简单、统一的方式,同时封装并实现公共逻辑。 power supply class位于d...

Change 1万+

Java工具类:CookieUtil、JsonUtil、JsonResult

CookieUtil package cn.tedu.web.util; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CookieUtil { /** ...

LawssssCat的博客 509

vivado安装空间与依赖要求:入门须知要点

准备安装Vivado时,需重点关注系统空间和依赖环境的配置。结合vivado安装教程,详细说明最低磁盘要求、内存配置及操作系统兼容性,帮助新手快速搭建开发环境,避免常见安装失败问题。

weixin_34725745的博客 1580

在Jackson中使用树模型节点(JsonNode)详解

本文将重点介绍如何在Jackson中使用树模型节点。 我们将使用*JsonNode*进行各种转换以及添加、修改和删除节点。

白石的专栏 8545

九齐NY8A051F低功耗模式全解析:从待机到休眠的省电实战

本文全面解析台湾九齐NY8A051F MCU的低功耗模式,从待机到休眠的省电实战技巧。通过实测数据展示四种工作模式的电流消耗差异,提供模式切换的标准流程和唤醒时序优化策略,并分享外围电路省电设计和低电压检测的实战应用,帮助开发者实现物联网设备的超长续航。

weixin_30839881的博客 413

深入解析摄像头硬件接口:DVP、MIPI-CSI2与USB的技术对比与应用场景

本文深入解析了摄像头三大主流硬件接口DVP、MIPI-CSI2与USB的核心技术差异。DVP接口作为并行传输的“老兵”,成本低但带宽和抗干扰能力有限;MIPI-CSI2凭借差分串行设计成为移动高清设备的首选,具备高带宽和强抗干扰性;USB接口则依托UVC标准实现了跨平台的即插即用。文章通过对比传输方式、带宽、应用场景等关键维度,为智能硬件、嵌入式系统等领域的工程师提供了清晰的选择指南。

c7d8e的博客 515

json对象赋值

将json对象obj里面key在数组a里面的对象,放入newObj的json对象中。

杨咩咩 857

EnlightenGAN训练复现记录

记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。

L_27N113E的博客 3849

JsonNode使用

JSONObject jsonObject = JSON.parseObject(deployOutput.getOutput()); state = jsonObject.get("state").toString();

ithouse的专栏 2万+

PX4固件下VTOL固定翼的3种起飞方式对比:手抛vs弹射vs跑道

本文深度解析PX4固件下VTOL固定翼的三种起飞方式:手抛、弹射与跑道起飞,对比其技术差异与适用场景。通过详细的参数配置和工程实践指南,帮助开发者优化起飞性能,提升无人机在不同环境下的适应性和可靠性。文章特别针对PX4飞控系统的最新特性进行了技术探讨。

weixin_30296405的博客 88

直升机空气动力学基础--005翼型的升阻比和气动力矩

焦点与翼型有关,总升力矩可以视为附加升力与零升力迎角升力的合成,对于对称翼型,零升力力矩为0,附加升力就是总升力,其焦点就是其压力中心。对于对称翼型,零升力力矩为0,对于非对称翼型,零升力力矩存在,与不对称度成正比。对于不对称翼型,升力对焦点的力矩保持不变。

ygf666的博客 4134

Jackson中JsonNode的取值asText()和textValue()区别

jackson库是一款json解析的java库,其api比较多,而且容易混淆,今天我们就来看一下asText和textValue的区别。 假设有一个json数据: { "a": 1, "b": { "b_1": "b1", "b_2": "b2" }, "c": "2" } 写一段代码对上面的json数据进行测试: private static void test2() throws JsonMappingException, JsonProcessingException {

赶路人儿 1万+

【箱子之字形摆放】python实现-附ChatGPT解析

箱子之形摆放有一批箱子(形式为宁符串,设为str) ,要求将这批箱子按以之形的顺序摆放在宽度为n的空地,请输出箱子的摆放结果。例如:箱子为ABCDEFG,空地宽度为3,摆放结果如图:则输出结果为:AFGBECD输入一行字符串,通过空格分制,前面部分为字母或数字组成的字符串str,表示;后面部分为一个数字n,表示。ABCDEFG 3箱子摆放结果,如题目示例所示AFGBECD。

sinat_29950703的博客 371

Jackson学习笔记(二)Jackson解析xml

Jackson解析xml Jackson解析xml并不常用,推荐使用Dom4j 导入jar文件: //基本 jackson-annotations-2.9.9.jar jackson-core-2.9.9.jar jackson-databind-2.9.9.jar //支持XML jackson-dataformat-xml-2.9.8.jar jackson-module-jaxb-a...

Vaingloryss的博客 4707

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Jackson学习笔记(二)

概述 使用jackson annotations简化和增强的json解析与生成。 Jackson-2.x通用annotations列表:https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations Jackson-1.x通用annotations列表:http://wiki.fasterxml.

WheroJ的专栏 2687

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Jackson介绍及使用

Jackson 于 2009 年 5 月首次正式发布,旨在满足快速、正确和轻量级三大宗旨。Jackson 是一个成熟稳定的库,它提供了多种不同的方法来处理 JSON,包括在一些简单的用例中使用注释。Jackson 提供了三个核心模块。) 定义了一个低级流式 API 并包括特定于 JSON 的实现。) 包含标准的 Jackson 注释。Databind() 实现数据绑定和对象序列化。将databind模块添加到项目中还会将流式处理和注释模块添加为传递依赖项。下面的示例将重点关注这些核心模块;

西凉的悲伤博客 5386

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SpringMVC -> 使用jackson将对象转化为json对象,jackson工具类

方法一:创建jackson对象,调用方法转化为json 对象 @ResponseBody @RequestMapping("/user1") public String user1() throws JsonProcessingException { //创建一个jackson对象,用来解析数据 ObjectMapper mapper = new ObjectMapper(); User user = new User(11, "rod", 22); //使用wr

rod0320的博客 7094

SpringBoot使用Jackson

Springboot配置JackSon处理类属性,JavaBean序列化为JSON格式,常用框架:阿里fastjson,谷歌gson、Jackson等。① 性能:Jackson > Fastjson > Gson >同个结构② Jackson、Fastjson、Gson 类库各有特点,各有自己的专长Jackson是spring-boot-starter-json依赖的一部分,spring-boot-starter-web中包含spring-boot-starter-json。也就是说当项目中引入了。

username00000的博客 1311

Jackson 学习笔记

Jackson 学习笔记语法JSON 转 POJOPOJO 转 JSONJSON 转 listlist 转 JSON手动构建json对象at 按路径取直接目标值取值转类型注解参考资料 语法 com.fasterxml.jackson.databind.ObjectMapper ObjectMapper mapper; 不要每次都new如果在Spring中直接注入使用。 JsonNode不能put可以强转objectNode后操作。 objectNode添加内容时。基础类型、包装类用 put,自定义对象用s

灵台方寸山斜月三星洞 2392

Jackson学习笔记

Jackson学习笔记 前言 jackson-databind 依赖 jackson-core 和 jackson-annotations ,所以只需要依赖 jackson-databind 即可 版本说明 jackson-databind=2.11.2 相关链接: jackson-databind maven 地址:https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind jackson githu

SIMBA1949的博客 1113

Jackson用法详解

有时,可能希望以不同于Jackson ObjectMapper缺省方式的方式将JSON字符串读入Java对象。可以将自定义反序列化器添加到ObjectMapper,可以按需要执行反序列化。这是在Jackson的ObjectMapper中注册和使用自定义反序列化器的方式:自定义反序列化器CarDeserializer类:> vc) {super(vc);return car;二)、将对象写入JSON。

2401_87252283的博客 2302

Jackson 精萃

– Start – 声 明:转载请注明出处 – Last Updated on 2019-05-25 – Written by ShangBo on 2019-05-25 – End

千里之行始于足下 3110

android jackson xml,[Android学习笔记]jackson库的使用

Jackson库一般用于序列化和反序列化操作,通常会涉及到的操作是:1. Java Object -> Json String2. Java Object -> Xml String3. Json String -> Java Object4. Xml String -> Java ObjectJSON相关操作需要jar包:jackson-all-x.x.x.jarXML相...

weixin_39523887的博客 488
上一篇: Java类加载器及其委托机制
下一篇: TCP/IP基础知识
java_huashan
博客等级 码龄14年 37粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值