JackSon学习笔记(二)

概述

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.     }  
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]
}
}

示例代码:

  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 + “\r\n” + “范围(range):” + range  
  44.                     + ”\r\n” + “开始时间(start):”  
  45.                     + sdf.format(new Date(start  1000)) + “\r\n”  
  46.                     + ”结束时间(end):” + sdf.format(new Date(end  1000)) + “\r\n”  
  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(”\r\n{\r\n  公司ID(companyId):” + companyId  
  67.                         + ”\r\n  公司名称(companyName):” + companyName + “\r\n”  
  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(”\r\n 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(”\r\n}\r\n”);  
  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. }  
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 &lt; 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 &lt; dataNode.size(); j++) {
                long dataValue = dataNode.get(j).asLong();
                buf.append(dataValue + ",");
            }
            buf.append("\r\n time:");
            for (int k = 0; k &lt; 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();
}
}

测试结果:

  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. }  
类型(type):2 
范围(range):1
开始时间(start):201305131200
结束时间(end):201305142359
城市名称(cityName):天津
{
公司ID(companyId):12000001
公司名称(companyName):天津
data:47947,48328,48573,48520,
time:201305131200,201305131205,201305131210,201305131215
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值