`

Jackson学习实例

阅读更多

一.Jackson使用Tree Model读取以及更新JSON

        使用ObjectMapper,可以以类似读取DOM的方式读取JSON,实例如下:

package com.bijian.study;

import java.util.Iterator;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ObjectNode;

public class JacksonDemo01 {

    public static void main(String[] args) {
        JacksonParseJSON();
        JacksonUpdateJSON();
    }
    
    private static void JacksonParseJSON() {
        
        System.out.println("JacksonParseJSON():");
        System.out.println("***************************************");
        String str = "{\"weatherinfo\":{\"city\":\"杭州\",\"city_en\":\"hangzhou\",\"date_y\":\"2014年1月12日\",\"date\":\"2016-03-17 15:46:20\",\"week\":\"星期日\",\"fchh\":\"11\",\"cityid\":\"101210101\"}}";
        ObjectMapper m = new ObjectMapper();  
        try {
            JsonNode rootNode = m.readTree(str);
            
            JsonNode weaNode = rootNode.get("weatherinfo");  
            System.out.println(weaNode);  
            System.out.println(weaNode.get("city"));  
              
            // Use Iterator to traverse to tree  
            Iterator<String> keys = weaNode.getFieldNames();   
            while(keys.hasNext()){  
                String fieldName = keys.next();  
                System.out.println(fieldName + ": " + weaNode.get(fieldName).getTextValue());  
            }
            System.out.println("***************************************");
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
    
    private static void JacksonUpdateJSON() {
        
        System.out.println("JacksonUpdateJSON():");
        System.out.println("***************************************");
        ObjectMapper mapper = new ObjectMapper();
        // will be of type ObjectNode  
        JsonNode rootNode = mapper.createObjectNode();
        ((ObjectNode) rootNode).put("name", "jingshou");  
        ((ObjectNode) rootNode).put("id", 523);  
        ((ObjectNode) rootNode).put("age", 30);   
        System.out.println(rootNode);  
        
        try {
            String json = mapper.writeValueAsString(rootNode);
            System.out.println(json);  
            ((ObjectNode) rootNode).remove("id");  
            System.out.println(rootNode);
            System.out.println("***************************************");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果:

JacksonParseJSON():
***************************************
{"city":"杭州","city_en":"hangzhou","date_y":"2014年1月12日","date":"2016-03-17 15:46:20","week":"星期日","fchh":"11","cityid":"101210101"}
"杭州"
city: 杭州
city_en: hangzhou
date_y: 2014年1月12日
date: 2016-03-17 15:46:20
week: 星期日
fchh: 11
cityid: 101210101
***************************************
JacksonUpdateJSON():
***************************************
{"name":"jingshou","id":523,"age":30}
{"name":"jingshou","id":523,"age":30}
{"name":"jingshou","age":30}
***************************************

 

二.Jackson的对象与json之间的转换

package com.bijian.study;

import java.io.StringWriter;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper;

import com.bijian.study.dto.User;
import com.bijian.study.dto.Weather;

public class JacksonDemo02 {
    
    public static void main(String[] args) {
        JacksonChangeJSON01();
        JacksonChangeJSON02();
    }
    
    /**
     * Jackson的对象与json之间的转换
     */
    private static void JacksonChangeJSON01() {
        
        StringBuilder sb = new StringBuilder();  
        sb.append("{");  
        sb.append("\"name\" : { \"first\" : \"Joe\", \"last\" : \"Sixpack\" },");  
        sb.append("\"gender\" : \"MALE\",");  
        sb.append("\"verified\" : false,");  
        sb.append("\"userImage\" : \"Rm9vYmFyIQ==\"");  
        sb.append("}");  
          
        ObjectMapper mapper = new ObjectMapper();
        try {
            User user = mapper.readValue(sb.toString(), User.class);
            ObjectMapper mapper2 = new ObjectMapper();    
            StringWriter sw = new StringWriter();    
            JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);    
            mapper2.writeValue(gen, user);    
            gen.close();    
            String json = sw.toString();  
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * Jackson的对象与json之间的转换
     */
    private static void JacksonChangeJSON02() {
        
        String str = "{\"city\":\"杭州\",\"city_en\":\"hangzhou\",\"date_y\":\"2014年1月12日\",\"date\":\"2016-03-17\",\"week\":\"星期日\",\"fchh\":\"11\",\"cityid\":\"101210101\"}";
        ObjectMapper m = new ObjectMapper();
        try {
            Weather w = m.readValue(str, Weather.class);
            ObjectMapper mapper2 = new ObjectMapper();    
            StringWriter sw = new StringWriter();    
            JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);    
            mapper2.writeValue(gen, w);    
            gen.close();    
            String json = sw.toString();  
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.bijian.study.dto;

public class User {  
    
    public enum Gender {  
        MALE, FEMALE  
    };  
  
    public static class Name {  
        private String _first, _last;  
  
        public String getFirst() {  
            return _first;  
        }  
  
        public String getLast() {  
            return _last;  
        }  
  
        public void setFirst(String s) {  
            _first = s;  
        }  
  
        public void setLast(String s) {  
            _last = s;  
        }  
    }  
  
    private Gender _gender;  
    private Name _name;  
    private boolean _isVerified;  
    private byte[] _userImage;  
  
    public Name getName() {  
        return _name;  
    }  
  
    public boolean isVerified() {  
        return _isVerified;  
    }  
  
    public Gender getGender() {  
        return _gender;  
    }  
  
    public byte[] getUserImage() {  
        return _userImage;  
    }  
  
    public void setName(Name n) {  
        _name = n;  
    }  
  
    public void setVerified(boolean b) {  
        _isVerified = b;  
    }  
  
    public void setGender(Gender g) {  
        _gender = g;  
    }  
  
    public void setUserImage(byte[] b) {  
        _userImage = b;  
    }  
}
package com.bijian.study.dto;

import java.util.Date;

public class Weather {

    private String city;
    private String city_en;
    private String date_y;
    private Date date;
    private String week;
    private int fchh;
    private String cityid;
    
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCity_en() {
        return city_en;
    }
    public void setCity_en(String city_en) {
        this.city_en = city_en;
    }
    public String getDate_y() {
        return date_y;
    }
    public void setDate_y(String date_y) {
        this.date_y = date_y;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public String getWeek() {
        return week;
    }
    public void setWeek(String week) {
        this.week = week;
    }
    public int getFchh() {
        return fchh;
    }
    public void setFchh(int fchh) {
        this.fchh = fchh;
    }
    public String getCityid() {
        return cityid;
    }
    public void setCityid(String cityid) {
        this.cityid = cityid;
    }
}

运行结果:

{"verified":false,"gender":"MALE","userImage":"Rm9vYmFyIQ==","name":{"first":"Joe","last":"Sixpack"}}
{"city":"杭州","city_en":"hangzhou","date_y":"2014年1月12日","date":1458172800000,"week":"星期日","fchh":11,"cityid":"101210101"}

 

三.设置时间格式

package com.bijian.study;

import java.io.StringWriter;
import java.text.SimpleDateFormat;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;

import com.bijian.study.dto.Weather;

public class JacksonDemo03 {

    /**
     * Json时间格式
     */
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    static ObjectMapper mapper = null;
    
    static{
            mapper = new ObjectMapper();
            SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT);  
            mapper.setDateFormat(fmt);
            mapper.enable(Feature.WRITE_NULL_MAP_VALUES);
            mapper.enable(Feature.WRITE_EMPTY_JSON_ARRAYS);
    }

    public static <T> T parse(JsonNode root, Class<T> rootType) {
        try {
            return mapper.readValue(root, rootType);
        } catch (Exception e) {
            throw new RuntimeException("JsonNode转换" + rootType.getName() + "异常", e);
        }
    }
    
    public static void main(String[] args) {
        jacksonChangeJson();
    }
    
    private static void jacksonChangeJson() {

        String str = "{\"weatherinfo\":{\"city\":\"杭州\",\"city_en\":\"hangzhou\",\"date_y\":\"2014年1月12日\",\"date\":\"2016-03-17 15:46:20\",\"week\":\"星期日\",\"fchh\":\"11\",\"cityid\":\"101210101\"}}";  
        try {
            JsonNode rootNode = mapper.readTree(str);
            
            JsonNode weaNode = rootNode.get("weatherinfo");
            Weather w = mapper.readValue(weaNode, Weather.class);
            
//            Weather w = parse(weaNode, Weather.class);
            
            ObjectMapper mapper2 = new ObjectMapper();    
            StringWriter sw = new StringWriter();    
            JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);    
            mapper2.writeValue(gen, w);    
            gen.close();    
            String json = sw.toString();  
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果 :

{"city":"杭州","city_en":"hangzhou","date_y":"2014年1月12日","date":1458200780000,"week":"星期日","fchh":11,"cityid":"101210101"}

 

四.抽取完善实例

package com.bijian.study;

import java.io.StringWriter;
import java.text.SimpleDateFormat;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;

import com.bijian.study.dto.BaseInfoDTO;

public class JacksonDemo04 {

    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    static ObjectMapper mapper = null;
    
    static{
            mapper = new ObjectMapper();
            SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT);  
            mapper.setDateFormat(fmt);
            mapper.enable(Feature.WRITE_NULL_MAP_VALUES);
            mapper.enable(Feature.WRITE_EMPTY_JSON_ARRAYS);
    }

    public static <T> T parse(JsonNode root, Class<T> rootType) {
        try {
            return mapper.readValue(root, rootType);
        } catch (Exception e) {
            throw new RuntimeException("JsonNode转换" + rootType.getName() + "异常", e);
        }
    }
    
    public static void main(String[] args) {
        jacksonChangeJson();
    }
    
    private static void jacksonChangeJson() {
        
        String str = "{\"id\":\"FC75C4AE61A04B49912C789A72D47F16\",\"detailList\":[{\"id\":\"D4416D08A9CE4AB882AA7EFC3EE66B14\",\"baseInfoId\":null,\"companyCode\":\"203\",\"companyName\":\"支付宝\",\"scale\":0.85},{\"id\":\"1392C28C4C6E422983F4EACC0C52A014\",\"baseInfoId\":null,\"companyCode\":\"211\",\"companyName\":\"微信\",\"scale\":0.15}],\"mark\":\"2\"}";
        try {
            //法一:ObjectMapper的readValue方法操作JsonNode节点,一般在解析JsonNode中的子节点时用到
//            JsonNode rootNode = mapper.readTree(str);
//            BaseInfoDTO c = mapper.readValue(rootNode, BaseInfoDTO.class);
            
            //法二:ObjectMapper的readValue方法做下封装
//            JsonNode rootNode = mapper.readTree(str);
//            BaseInfoDTO c = parse(rootNode, BaseInfoDTO.class);
            
            //法三:ObjectMapper的readValue方法直接操作JSON串
            BaseInfoDTO c = mapper.readValue(str, BaseInfoDTO.class);
            
            ObjectMapper mapper2 = new ObjectMapper();    
            StringWriter sw = new StringWriter();    
            JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);    
            mapper2.writeValue(gen, c);    
            gen.close();    
            String json = sw.toString();  
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package com.bijian.study.dto;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class AbstractDTO {

    /**
     * 序列化
     */
    private static final long serialVersionUID = -6492889909372878745L;

    /**
     * 主键id
     */
    private String id;
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    
    /**
     * ToString方法
     */
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
    }
}
package com.bijian.study.dto;

import java.util.List;

public class BaseInfoDTO extends AbstractDTO {

    /**
     * 序列化
     */
    private static final long serialVersionUID = -1354767346065648328L;
    /**
     * 详细信息描述
     */
    private List<DetailDTO> detailList;

    private String mark;

    public List<DetailDTO> getDetailList() {
        return detailList;
    }

    public void setDetailList(List<DetailDTO> detailList) {
        this.detailList = detailList;
    }

    public String getMark() {
        return mark;
    }

    public void setMark(String mark) {
        this.mark = mark;
    }
}
package com.bijian.study.dto;

public class DetailDTO extends AbstractDTO {

    /**
     * 序列化
     */
    private static final long serialVersionUID = -8405894524309728426L;
    
    /**基本信息(外键)*/
    private String baseInfoId;
    private String companyCode;
    private String companyName;
    private Double scale;
    
    public String getBaseInfoId() {
        return baseInfoId;
    }
    public void setBaseInfoId(String baseInfoId) {
        this.baseInfoId = baseInfoId;
    }
    public String getCompanyCode() {
        return companyCode;
    }
    public void setCompanyCode(String companyCode) {
        this.companyCode = companyCode;
    }
    public String getCompanyName() {
        return companyName;
    }
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
    public Double getScale() {
        return scale;
    }
    public void setScale(Double scale) {
        this.scale = scale;
    }
}

运行结果:

{"id":"FC75C4AE61A04B49912C789A72D47F16","detailList":[{"id":"D4416D08A9CE4AB882AA7EFC3EE66B14","baseInfoId":null,"companyCode":"203","companyName":"支付宝","scale":0.85},{"id":"1392C28C4C6E422983F4EACC0C52A014","baseInfoId":null,"companyCode":"211","companyName":"微信","scale":0.15}],"mark":"2"}

 

分享到:
评论

相关推荐

    Jackson实例入门

    在本篇文章中,我们将通过实例来入门Jackson的使用。 一、Jackson库简介 Jackson库的核心组件包括: 1. `Jackson-databind`:提供将Java对象映射到JSON和从JSON反序列化回Java对象的功能。 2. `Jackson-core`:基础...

    jackson电动力学习题答案

    Magyar在其导言部分提到,尽管Jackson的书在某些方面非常出色,但也存在不足之处:书中有时假定了读者对某些材料已有所了解、遗漏了一些重要的步骤以及提供的实例不够充分。这些因素使得该书不太适合作为入门级教材...

    Android 日记本学习实例

    总的来说,“Android日记本学习实例”是一个综合性的项目,涵盖了Android开发中的多个重要知识点,包括Activity、Intent、布局设计、SQLite数据库、权限管理和网络通信等。通过这个实例,你可以更深入地理解和掌握...

    220个JAVA初学者实例

    19. **JSON处理**:JSON作为一种轻量级的数据交换格式,学习使用Gson或Jackson库进行解析和序列化。 20. **单元测试**:使用JUnit进行代码测试,确保程序的正确性。 以上只是Java初学者实例中可能涉及的部分关键...

    基于Java的实例源码-高性能的JSON处理 Jackson.zip

    通过深入学习和实践这个Jackson实例源码,开发者不仅可以掌握如何在Java中有效地处理JSON,还可以了解如何优化性能,避免内存溢出,以及如何根据项目需求定制JSON处理策略。这将对提高Java项目的质量和效率大有裨益...

    jackson经典电动力学部分习题答案

    该书在某些地方假设了读者对基础材料的熟悉度,省略了关键步骤,并且提供的实例不足。对于初学者而言,这可能是一本难以消化的书籍。然而,Jackson的野心在于他几乎涵盖了经典电磁理论的大部分内容,除了一些明显的...

    Jackson资源jar包+api

    通过阅读API文档,你可以学习如何创建`ObjectMapper`实例,如何序列化和反序列化对象,如何配置序列化过程,以及如何处理日期、自定义类型和其他复杂数据结构。 在实际开发中,Jackson可以处理以下场景: - 将Java...

    jackson2.6 (3个包)

    Jackson是Java领域中广泛使用的库,它主要用于处理JSON数据,实现了JSON与Java对象之间的相互转换。这个名为"jackson2.6"的压缩包...通过学习和熟练掌握Jackson,开发者可以极大地提高工作效率,降低JSON操作的复杂性。

    android 实例源码 集合

    通过实例源码,我们可以学习如何正确构建和传递Intent,以及处理Activity之间的跳转和数据传递。 2. **Layout设计**: Android的布局管理器如LinearLayout、RelativeLayout、ConstraintLayout等,是构建用户界面的...

    JAVA-jackson.zip

    在这个名为"JAVA-jackson.zip"的压缩包中,包含了学习Jackson和JSON解析所需的资源。 首先,我们要了解Jackson库的核心组件。主要有三个: 1. **Jackson-databind**:这是Jackson的核心模块,提供了将Java对象转换...

    jackson2.x主要jar包

    例如,一个常见的用法是创建一个`ObjectMapper`实例,然后使用它的`readValue()`和`writeValue()`方法来读写JSON数据。同时,通过注解可以在不修改模型类的情况下,灵活地控制序列化和反序列化的行为。 总的来说,...

    jackson技术文档.rar

    4. 数据绑定:Jackson的数据绑定机制使它能直接将JSON解析到Java对象的实例,或从对象生成JSON,无需编写额外的代码。这对于构建RESTful API和处理JSON数据的Web服务非常有用。 5. 流式API:除了数据绑定,Jackson...

    Android开发实例大全源码第二部分

    5. **网络编程**:HTTP请求库如Volley、OkHttp的使用,学习JSON解析(如Gson、Jackson)及上传下载数据。 6. **图片加载与缓存**:理解并实现图片加载库如Picasso、Glide,学习图片的缓存策略。 7. **多媒体处理**...

    最新的高性能 JSON 处理jackson-2.8.9.jar下载

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输,因为...通过深入学习和实践,开发者可以充分利用Jackson的功能,提高开发效率并优化JSON相关的代码质量。

    Android开发10个实例源码

    3. **网络通信**:Android应用常常需要与服务器进行数据交换,实例可能涵盖了使用HttpURLConnection、OkHttp或Retrofit进行网络请求,以及使用Gson或Jackson进行JSON数据解析。 4. **异步处理**:Android中的主线程...

    100个Android实例

    4. **广播接收器(BroadcastReceiver)**:广播是Android中全局事件通知机制,开发者可以通过实例学习如何注册和使用BroadcastReceiver,以应对系统或自定义广播事件。 5. **内容提供者(ContentProvider)**:内容...

    android 天气预报实例

    在Android平台上开发一个天气预报应用是一项常见的任务,它涉及到网络通信、数据解析、UI设计等多个技术领域。在这个“android 天气预报实例”中,我们...通过这个实例的学习,开发者能够提升在实际项目中的综合技能。

    Android天气预报实例

    这个实例对初学者来说具有很高的学习价值,因为它涵盖了Android开发的多个关键点,同时通过实际的项目练习能更好地理解和掌握这些知识点。如果你在学习过程中遇到任何问题,记得联系提供此实例的开发者,他们可能会...

    利用jackson包进行json字符串与pojo类之间的转换源代码

    在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛用于前后端数据传输。...通过深入学习和实践,开发者可以充分利用Jackson的功能,提高项目的可维护性和性能。

Global site tag (gtag.js) - Google Analytics