JackSon解析json字符串

原文:http://blog.csdn.net/java_huashan/article/details/9353903

概述

jackson解析json例子

准备工作

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

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

Example

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

要解析的Json字符串:

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

示例代码:

  1. package com.cennavi.dqe.test;
  2. import java.io.IOException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.TimeZone;
  6. import com.fasterxml.jackson.core.JsonProcessingException;
  7. import com.fasterxml.jackson.databind.JsonNode;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. public class ParseJsonTest {
  10. /**
  11. * @param args
  12. */
  13. public static void main(String[] args) {
  14. String data = "{\"type\":2,\"range\":1,\"start\":1368417600,\"end\":1368547140,"
  15. + "\"cityName\":\"天津\",\"companyIds\":[\"12000001\"],\"companyNames\":[\"天津\"],"
  16. + "\"12000001\":{\"data\":[47947,48328,48573,48520],"
  17. + "\"timestamps\":[1368417600,1368417900,1368418200,1368418500]}}";
  18. String data2 = parseJson(data);
  19. System.out.println(data2);
  20. }
  21. public static String parseJson(String data) {
  22. // 用来展现解析Json得到的值
  23. StringBuffer buf = new StringBuffer();
  24. try {
  25. ObjectMapper mapper = new ObjectMapper();
  26. JsonNode rootNode = mapper.readTree(data); // 读取Json
  27. // rootNode.path("xx")返回的还是一个JsonNode对象,调用该JsonNode的相应方法,得到键对应的值
  28. int type = rootNode.path("type").asInt();
  29. int range = rootNode.path("range").asInt();
  30. long start = rootNode.path("start").asLong();
  31. long end = rootNode.path("end").asLong();
  32. String cityName = rootNode.path("cityName").asText();
  33. // 转换时间格式
  34. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
  35. sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
  36. String str = "类型(type):" + type + "\r\n" + "范围(range):" + range
  37. + "\r\n" + "开始时间(start):"
  38. + sdf.format(new Date(start * 1000)) + "\r\n"
  39. + "结束时间(end):" + sdf.format(new Date(end * 1000)) + "\r\n"
  40. + "城市名称(cityName):" + cityName;
  41. buf.append(str);
  42. // 得到companyIds的JsonNode对象
  43. JsonNode companyIds = rootNode.path("companyIds");
  44. JsonNode companyNames = rootNode.path("companyNames");
  45. // 遍历companyIds中的内容
  46. for (int i = 0; i < companyIds.size(); i++) {
  47. String companyId = companyIds.get(i).asText();
  48. // 本例解析的Json字符串中companyIds与companyNames的长度是相同的,所有直接遍历companyNames
  49. String companyName = companyNames.get(i).asText();
  50. // companyId的值:12000001,对应Json串中的
  51. // "12000001":{"data":[...],"timestamps":[....]}
  52. JsonNode infoNode = rootNode.path(companyId);
  53. // 得到"12000001":{"data":[...],"timestamps":[....]}中的data和timestamps的JsonNode对象
  54. JsonNode dataNode = infoNode.path("data");
  55. JsonNode timestampsNode = infoNode.path("timestamps");
  56. // 遍历data和timestamps 本例中data.size与timestamps.size是相等的
  57. buf.append("\r\n{\r\n  公司ID(companyId):" + companyId
  58. + "\r\n  公司名称(companyName):" + companyName + "\r\n"
  59. + " data:");
  60. for (int j = 0; j < dataNode.size(); j++) {
  61. long dataValue = dataNode.get(j).asLong();
  62. buf.append(dataValue + ",");
  63. }
  64. buf.append("\r\n time:");
  65. for (int k = 0; k < timestampsNode.size(); k++) {
  66. long timeValue = timestampsNode.get(k).asLong();
  67. buf.append(sdf.format(new Date(timeValue * 1000)) + ",");
  68. }
  69. buf.append("\r\n}\r\n");
  70. }
  71. } catch (JsonProcessingException e) {
  72. e.printStackTrace();
  73. } catch (IOException e) {
  74. // TODO 自动生成的 catch 块
  75. e.printStackTrace();
  76. }
  77. return buf.toString();
  78. }
  79. }

测试结果:

  1. 类型(type):2
  2. 范围(range):1
  3. 开始时间(start):201305131200
  4. 结束时间(end):201305142359
  5. 城市名称(cityName):天津
  6. {
  7. 公司ID(companyId):12000001
  8. 公司名称(companyName):天津
  9. data:47947,48328,48573,48520,
  10. time:201305131200,201305131205,201305131210,201305131215
  11. }
 

JackSon解析json字符串的更多相关文章

  1. java后台处理解析json字符串的两种方式

    简单说一下背景 上次后端通过模拟http请求百度地图接口,得到的是一个json字符串,而我只需要其中的某个key对应的value. 当时我是通过截取字符串取的,后来觉得不太合理,今天整理出了两种处理解 ...

  2. 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象

    使用 dynamic 标记解析JSON字符串  http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...

  3. json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。

    json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...

  4. C#解析JSON字符串总结

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  5. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

  6. 解析Json字符串的三种方法

    在很多时候,我们的需要将类似 json 格式的字符串数据转为json, 下面将介绍日常中使用的三种解析json字符串的方法 1.首先,我们先看一下什么是 json 格式字符串数据,很简单,就是 jso ...

  7. Java解析json字符串和json数组

    Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){ Map ...

  8. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  9. C#解析JSON字符串总结(转载)

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

随机推荐

  1. Codeforces Round #250 (Div. 1) D. The Child and Sequence

    D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  2. Android小技术知识(多用于面试)

    Android Dev Doc Android 开发 多使用内部类 使用方便且效率高 UI方面的知识 一.在编写layout的xml文件时,一定要仔细!如果在报错的时候,如何解决? 解决:将xml仔细 ...

  3. Warning: cast to/from pointer from/to integer of different size

    将int变量转为(void*)时出现错误 error: cast to pointer from integer of different size [-Werror=int-to-pointer-c ...

  4. Spring事务属性具体解释

    Spring.是一个Java开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的.框架的主要优势之中的一个就是其分层架构,分层架构同意使用者选择使用哪一个组件,同一时候为 J2EE ...

  5. PHP-汇总CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI

    什么是CGI 1.CGI是HTTP协议与其他外部应用程序之间的一个接口标准 2.CGI程序或脚本(CGI程序通过HTTP服务器去执行时, 必须在CGI程序中制定其执行程序的完整路径, 使SHELL能找 ...

  6. EL和自定义函数库

    问题:在数据显示的时候经常需要调用一些方法对需要显示的数据进行基本的处理,如: 数据过滤.求子串等操作.那么就需要使用EL表达式进行快速的函数调用. 引入HTMLFilter.java类 描述为函数 ...

  7. 解决Sping 框架 Controller@Value获取不到值

    原因:要获取 int.properties 中的数据 但是 一直拿不到值 如下代码 使用这种方式注入 *.properties文件 <!-- 引入配置文件 --> <context: ...

  8. tsung的配置使用

    1.在root下新建.tsung文件,在.tsung文件新建log文件夹..tsung文件用于存放log和xml文件 2.复制/usr/local/tsung/share/doc/tsung/exam ...

  9. 线程间操作无效: 从不是创建控件“txtreceive”的线程访问它。

    自己在写串口通信的时候遇到个这样的问题 自己是用vs2010  c#写的错误提示是这样的“线程间操作无效: 从不是创建控件“txtreceive”的线程访问它.”  用的控件是自带的serialPor ...

  10. mysql误删root用户或者忘记root密码解决方法

    解决方法一: 到其他安装了Mysql的服务器(前提是要知道该服务器上Mysql的root用户密 码),打开[Mysql的安装目录/var/mysql],将其中的user.frm.user.MYD.us ...