zoukankan      html  css  js  c++  java
  • 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字符串:

    [plain] view plain copy
    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.     }  

    示例代码:

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

    测试结果:

    [java] view plain copy
    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. }  
     
  • 相关阅读:
    java中Collection 与Collections的区别
    Bridge桥接模式(设计模式11)
    动态代理模式(设计模式10)
    代理模式(静态代理)(设计模式9)
    适配器模式(工厂模式8)
    原型模式(工厂模式7)
    建造者模式(工厂模式6)
    抽象工厂模式(工厂模式5)
    工厂模式(工厂模式4)
    简单工厂模式(工厂模式3)
  • 原文地址:https://www.cnblogs.com/williamjie/p/9242932.html
Copyright © 2011-2022 走看看