JackSon解析json字符串
JackSon解析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解析json字符串的更多相关文章
- java后台处理解析json字符串的两种方式
简单说一下背景 上次后端通过模拟http请求百度地图接口,得到的是一个json字符串,而我只需要其中的某个key对应的value. 当时我是通过截取字符串取的,后来觉得不太合理,今天整理出了两种处理解 ...
- 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象
使用 dynamic 标记解析JSON字符串 http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...
- json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。
json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...
- C#解析JSON字符串总结
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- Json转model对象,model转json,解析json字符串
GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...
- 解析Json字符串的三种方法
在很多时候,我们的需要将类似 json 格式的字符串数据转为json, 下面将介绍日常中使用的三种解析json字符串的方法 1.首先,我们先看一下什么是 json 格式字符串数据,很简单,就是 jso ...
- Java解析json字符串和json数组
Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){ Map ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- C#解析JSON字符串总结(转载)
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
随机推荐
- 性能测试工具 nGrinder 项目剖析及二次开发
转:https://testerhome.com/topics/4225 0.背景 组内需要一款轻量级的性能测试工具,之前考虑过LR(太笨重,单实例,当然它的地位是不容置疑的),阿里云的PTS(htt ...
- Android工程内嵌Flutter
本文记录一下Android主工程中嵌入部分Fluttter页面的实现方法. 创建一个Android工程模拟你的现有工程 为了让Android工程和Flutter工程互不干扰,这里不再以Android工 ...
- SpringMVC请求参数和响应结果全局加密和解密
前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.t ...
- Entity Framework Code First关系映射约定【l转发】
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- mindmanager2018官方下载地址
mindmanager2018官方下载地址 CreationTime--2018年6月6日09:09:56 Author:Marydon 找了很多都是假的链接地址,流氓软件,根本不能输入许可密钥, ...
- Oracle Unicode转中文(解码)
Oracle Unicode转中文(解码) CreateTime--2018年3月29日15:23:30 Author:Marydon 情景描述: 将数据库中的某个字段误存储的是Unicode编码 ...
- 基于olami开放语义平台的微信小程序遥知之源码实现
概述 实现一个智能生活信息查询的小秘书功能,支持查天气.新闻.日历.汇率.笑话.故事.百科.诗词.邮编.区号.菜谱.股票.节目预告,还支持闲聊.算24点.数学计算.单位换算.购物.搜索等功能. 使用方 ...
- 使用 Python 的 matplotlib 绘图库进行绘图
matplotlib 是 Python 最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 1 使用 Ma ...
- Objective-C中的基本数据类型
// // main.m // 01.基本数据类型 // // Created by zhangqs008 on 14-2-13. // Copyright (c) 2014年 zhangqs008. ...
- atitit.Atitit. Gui控件and面板-----服务端控件 java struts的实现最佳实践
atitit.Atitit. Gui控件and面板-----服务端控件 java struts的实现最佳实践 1. 服务器控件的类别 1 1.1. 数据控件:该类控件可细分为两种类型:数据源控件和数 ...