JackSon学习笔记(二)

概述

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
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jackson是一个流行的Java库,用于将Java对象序列化为JSON格式数据或将JSON格式数据反序列化为Java对象。使用Maven来管理你的项目依赖非常方便,以下是在Maven项目中使用Jackson的步骤: 1. 打开你的Maven项目,找到pom.xml文件。 2. 在<dependencies>标签中添加以下代码: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.4</version> </dependency> ``` 这个配置将从Maven中央仓库下载Jackson的核心库。 3. 如果你需要使用其他Jackson模块,例如Jackson数据格式、Jackson注解等,请参照以下示例配置: ```xml <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.12.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.12.4</version> </dependency> ``` 这个配置将从Maven中央仓库下载Jackson的XML数据格式库和JAXB注解模块。 4. 保存pom.xml文件,Maven将自动下载所有依赖项并将它们添加到你的项目中。 现在,你可以在你的Java代码中使用Jackson库来序列化和反序列化对象。例如,你可以使用以下代码将一个Java对象转换为JSON字符串: ```java ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(myObject); ``` 这里,ObjectMapper是Jackson的核心类,它提供了将Java对象序列化为JSON格式数据的方法。你可以使用writeValueAsString()方法将一个Java对象转换为JSON字符串

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值