`

Java JSON总结

阅读更多

常用JSON:Apache JSON、FastJSON、Jackson、Google Gson

 

1  JSONObject put,accumulate,element的区别  

 

public Object put (Object key, Object value) 将value映射到key下。如果此JSONObject对象之前存在一个value在这个key下,当前的value会替换掉之前的value

Associates the specified value with the specified key in this map(optional operation). If the map previously contained . a mapping for this key, the old value is replaced by the specified value. (A map m is said to contain a mapping for a key k if and only if m.containsKey(k) would return true .))

 

public JSONObject accumulate (String key, Object value) 累积value到这个key下。这个方法同element()方法类似,特殊的是,如果当前已经存在一个value在这个key下那么一个JSONArray将会存储在这个key下来保存所有累积的value。如果已经存在一个JSONArray,那么当前的value就会添加到这个JSONArray中

。相比之下replace方法会替代先前的value

Accumulate values under a key. It is similar to the element method except that if there is already an object stored 

under the key then a JSONArray is stored under the key to hold all of the accumulated values. If there is already a 

JSONArray, then the new value is appended to it. In contrast, the replace method replaces the previous value.

 

public JSONObject element (String key, Object value) 将键/值对放到这个JSONObject对象里面。如果当前value为空(null),那么如果这个key存在的话,这个key就会移除掉。如果这

个key之前有value值,那么此方法会调用accumulate()方法。

Put a key/value pair in the JSONObject. If the value is null, then the key will be removed from the JSONObject if it is 

present. If there is a previous value assigned to the key, it will call accumulate.

 

2

java json解析类库 Jackson 基础

Jackson是一个高效的java bean 到json的转换工具,项目主页http://jackson.codehaus.org/


Jackson提供了三种处理Json的方法,分别是:
Streaming API :基于独立事件模型处理JSON。效率最高,是下面两种方式的基础。
分别用org.codehaus.jackson.JsonParser 和 org.codehaus.jackson.JsonGenerator 读写Json

Tree Model :基于一个可变的树表示一个Json模型。最灵活
org.codehaus.jackson.map.ObjectMapper 创建树(基于JsonNode为节点)
Tree Model与XML DOM类似

 

Data Binding:用属性存取或者注释来处理从Json到POJO的转换。最方便,常用这种API
有简单绑定和全数据绑定,同样用org.codehaus.jackson.map.ObjectMapper处理

 

下面是Data Binding方法的基本使用
首先是将java bean转换为JSON

复制代码
 1 public static void main(String[] args) {  
 2     TestGridBean bean=null;  
 3     Vector vec = new Vector();  
 4     for(int i=0;i<1000;i++) {  
 5         bean = new TestGridBean();  
 6         bean.setNo(i);  
 7         bean.setName("姓名"+i);  
 8         bean.setMathscore(i);  
 9         bean.setEnscore(i);  
10         vec.add(bean);  
11     }  
12     //ObjectMapper 线程安全具有缓存机制,重用可显著提高效率,实际使用中可设为全局公用  
13     ObjectMapper mapper = new ObjectMapper();  
14     //用此类构造字符串  
15     StringWriter w=new StringWriter();  
16     try {  
17         //writeXXX方法是将对象写成JSON,readXXX方法是将JSON封装成对象  
18         mapper.writeValue(w, vec);  
19     } catch (JsonGenerationException e) {  
20         e.printStackTrace();  
21     } catch (JsonMappingException e) {  
22         e.printStackTrace();  
23     } catch (IOException e) {  
24         e.printStackTrace();  
25     }  
26     String s = w.toString();  
27     S.echo(s);  
28 }  
复制代码



然后是JSon到java bean 的转换

用GT-Grid前台传入的表格参数json为例,其格式为形如:

复制代码
{"recordType":"object",   "pageInfo":{"pageSize":20,"pageNum":1,"totalRowNum":-1,"totalPageNum":0,"startRowNum":1,"endRowNum":-1},  
"columnInfo":[  
    {"id":"no","header":"学号","fieldName":"no","fieldIndex":"no","sortOrder":null,"hidden":false,"exportable":true,"printable":true},  
    {"id":"name","header":"姓名","fieldName":"name","fieldIndex":"name","sortOrder":null,"hidden":false,"exportable":true,"printable":true},  
    {"id":"total","header":"总成绩","fieldName":"total","fieldIndex":"total","sortOrder":null,"hidden":false,"exportable":true,"printable":true},  
    {"id":"detail","header":"详细信息","fieldName":"detail","fieldIndex":"detail","sortOrder":null,"hidden":false,"exportable":true,"printable":true}  
   ],  
"sortInfo":[],  
"filterInfo":[],  
"remotePaging":true,  
"parameters":{},  
 "action":"load"}  
复制代码

以上json对应的java bean应该是如下格式:

复制代码
package gxlu.ims.webapps.action.syncResultQuery;  
import java.io.Serializable;  
public class GTGridBean implements Serializable {  
    /** 
     *  
     */  
    private static final long serialVersionUID = 1L;  
    private String recordType;  
    private String[] sortInfo;  
    private String[] filterInfo;  
    private boolean remotePaging;  
    private String action;  
    private PageInfo pageInfo;  
    private ColumnInfo[] columnInfo;  
    private Parameters parameters;  
      
    public static class PageInfo {  
        private String pageSize;  
        private long pageNum;  
        private long totalPageNum;  
        private long totalRowNum;  
        private long startRowNum;  
        private long endRowNum;  
        public String getPageSize() {  
            return pageSize;  
        }  
        public void setPageSize(String pageSize) {  
            this.pageSize = pageSize;  
        }  
        public long getPageNum() {  
            return pageNum;  
        }  
        public void setPageNum(long pageNum) {  
            this.pageNum = pageNum;  
        }  
        public long getTotalRowNum() {  
            return totalRowNum;  
        }  
        public void setTotalRowNum(long totalRowNum) {  
            this.totalRowNum = totalRowNum;  
        }  
        public long getStartRowNum() {  
            return startRowNum;  
        }  
        public void setStartRowNum(long startRowNum) {  
            this.startRowNum = startRowNum;  
        }  
        public long getEndRowNum() {  
            return endRowNum;  
        }  
        public void setEndRowNum(long endRowNum) {  
            this.endRowNum = endRowNum;  
        }  
        public long getTotalPageNum() {  
            return totalPageNum;  
        }  
        public void setTotalPageNum(long totalPageNum) {  
            this.totalPageNum = totalPageNum;  
        }  
    }  
      
    public static class ColumnInfo {  
        private String  id;  
        private String header;  
        private String fieldName;  
        private String fieldIndex;  
        private String sortOrder;  
        private boolean hidden;  
        private boolean exportable;  
        private boolean printable;  
        public String getId() {  
            return id;  
        }  
        public void setId(String id) {  
            this.id = id;  
        }  
        public String getHeader() {  
            return header;  
        }  
        public void setHeader(String header) {  
            this.header = header;  
        }  
        public String getFieldName() {  
            return fieldName;  
        }  
        public void setFieldName(String fieldName) {  
            this.fieldName = fieldName;  
        }  
        public String getFieldIndex() {  
            return fieldIndex;  
        }  
        public void setFieldIndex(String fieldIndex) {  
            this.fieldIndex = fieldIndex;  
        }  
        public String getSortOrder() {  
            return sortOrder;  
        }  
        public void setSortOrder(String sortOrder) {  
            this.sortOrder = sortOrder;  
        }  
        public boolean isHidden() {  
            return hidden;  
        }  
        public void setHidden(boolean hidden) {  
            this.hidden = hidden;  
        }  
        public boolean isExportable() {  
            return exportable;  
        }  
        public void setExportable(boolean exportable) {  
            this.exportable = exportable;  
        }  
        public boolean isPrintable() {  
            return printable;  
        }  
        public void setPrintable(boolean printable) {  
            this.printable = printable;  
        }  
    }  
      
    public static class Parameters {  
          
    }  
      
    public String getRecordType() {  
        return recordType;  
    }  
    public void setRecordType(String recordType) {  
        this.recordType = recordType;  
    }  
    public PageInfo getPageInfo() {  
        return pageInfo;  
    }  
    public void setPageInfo(PageInfo pageInfo) {  
        this.pageInfo = pageInfo;  
    }  
    public String[] getSortInfo() {  
        return sortInfo;  
    }  
    public void setSortInfo(String[] sortInfo) {  
        this.sortInfo = sortInfo;  
    }  
    public String[] getFilterInfo() {  
        return filterInfo;  
    }  
    public void setFilterInfo(String[] filterInfo) {  
        this.filterInfo = filterInfo;  
    }  
    public boolean isRemotePaging() {  
        return remotePaging;  
    }  
    public void setRemotePaging(boolean remotePaging) {  
        this.remotePaging = remotePaging;  
    }  
    public String getAction() {  
        return action;  
    }  
    public void setAction(String action) {  
        this.action = action;  
    }  
      
    public static long getSerialversionuid() {  
        return serialVersionUID;  
    }  
    public Parameters getParameters() {  
        return parameters;  
    }  
    public void setParameters(Parameters parameters) {  
        this.parameters = parameters;  
    }  
    public ColumnInfo[] getColumnInfo() {  
        return columnInfo;  
    }  
    public void setColumnInfo(ColumnInfo[] columnInfo) {  
        this.columnInfo = columnInfo;  
    }  
}  
复制代码

使用jsckson转换的代码:

复制代码
1 public void testPageData() throws Exception {  
2     String json = req.getParameter("_gt_json");  
3     S.echo(json);  
4     //将json转换为java bean用readXXX方法  
5     Object obj = mapper.readValue(json, GTGridBean.class);  
6     S.echo(obj);  
7 }
复制代码

 

 

 

Google Gson应用

 

1.需要的Jar包
 
    1) Google Gson(gson-xxx.jar)下载地址:http://code.google.com/p/google-gson/downloads/list
 
    2)JUnit4
 
2. 应用实例代码
 
    下载地址:http://download.csdn.net/source/3499627
 
包括如下类:
 
1)普通JavaBean类/带日期属性的JavaBean类:JavaBean.java/DateBean.java
 
2)日期序列/反序列工具类:DateSerializerUtils.java、DateDeserializerUtils.java
 
3)测试类GsonTester.java
 
具体代码:
 
1)JavaBean类/DateBean类
 
     JavaBean属性:String id、String name、int age、String addr;
 
     DateBean属性:String id、String name、int age、java.util.Date date;
 
2
 
DateSerializerUtils.java
 
package com.lupeng.javase.json.util;
 
  
 
import java.lang.reflect.Type;
 
import java.util.Date;
 
import com.google.gson.JsonElement;
 
import com.google.gson.JsonPrimitive;
 
import com.google.gson.JsonSerializationContext;
 
import com.google.gson.JsonSerializer;
 
  
 
/**
 
 * 日期解序列实用工具类
 
 * @author Lupeng
 
 * @date   2011-08-06
 
 */
 
public class DateSerializerUtils implements JsonSerializer<java.util.Date>{
 
    @Override
 
    public JsonElement serialize(Date date, Type type,
 
           JsonSerializationContext content) {
 
       return new JsonPrimitive(date.getTime());
 
    }
 
  
 
}
 
DateDeserializerUtils.java
 
package com.lupeng.javase.json.util;
 
  
 
import java.lang.reflect.Type;
 
import com.google.gson.JsonDeserializationContext;
 
import com.google.gson.JsonDeserializer;
 
import com.google.gson.JsonElement;
 
import com.google.gson.JsonParseException;
 
/**
 
 * 日期序列化实用工具类
 
 * @author Lupeng
 
 * @date   2011-08-06
 
 */
 
public class DateDeserializerUtils implements JsonDeserializer<java.util.Date>{
 
    @Override
 
    public java.util.Date deserialize(JsonElement json, Type type,
 
           JsonDeserializationContext context) throws JsonParseException {
 
       return new java.util.Date(json.getAsJsonPrimitive().getAsLong());
 
    }
 
  
 
}
 
  
 
3)测试类GsonTester.java
 
package com.lupeng.javase.apps.json;
 
  
 
import java.text.DateFormat;
 
import java.util.ArrayList;
 
import java.util.Date;
 
import java.util.HashMap;
 
import java.util.List;
 
import java.util.Map;
 
  
 
import org.junit.Before;
 
import org.junit.Test;
 
  
 
import com.google.gson.Gson;
 
import com.google.gson.GsonBuilder;
 
import com.lupeng.javase.json.bean.DateBean;
 
import com.lupeng.javase.json.bean.JavaBean;
 
import com.lupeng.javase.json.util.DateDeserializerUtils;
 
import com.lupeng.javase.json.util.DateSerializerUtils;
 
  
 
/**
 
 * Google Gson解析Json数据实例
 
 *
 
 * 1.Bean、Json转换          testBeanJson()
 
 * 2.List -> Json转换     testList2Json()
 
 * 3.泛型List、Json相互转换 testGenericList2Json()
 
 * 4.Map -> Json转换         testMap2Json()
 
 * 5.泛型Map、Json相互转换 testGenericMap2Json()
 
 * 6.带日期属性Bean、Json转换  testDateBeanJson()
 
 * 7.带日期属性泛型List、Json转换
 
 *                           testDateGenericListJson()
 
 *
 
 * @author Lupeng
 
 * @create 2011-08-05
 
 * @modify 2011-08-06
 
 */
 
@SuppressWarnings("unchecked")
 
public class GsonTester {
 
    private Gson gson = null;
 
    private GsonBuilder gsonBuilder = null;
 
    
 
    @Before
 
    public void setUp() {
 
       gson = new Gson();
 
       gsonBuilder = new GsonBuilder();
 
    }
 
    /**
 
     * JavaBean、Json相互转换
 
     */
 
    @Test
 
    public void testBeanJson() {
 
       JavaBean bean = new JavaBean("1001", "scott", 20, "TL");
 
       
 
       // Bean -> Json
 
       String json = gson.toJson(bean);
 
       System.out.println(json);
 
       
 
       // Json -> Bean
 
       bean = gson.fromJson(json, JavaBean.class);
 
       System.out.println(bean);
 
    }
 
    
 
    /**
 
     * List转换成Json字符串
 
     */
 
    @Test
 
    public void testList2Json() {
 
       // List
 
       List list = new ArrayList();
 
       for(int i = 0; i < 5; i++) {
 
           list.add("element" + i);
 
       }
 
       System.out.println(list);
 
       
 
       // List -> Json
 
       String json = gson.toJson(list);
 
       System.out.println(json);
 
    }
 
    
 
    /**
 
     * 泛型List、Json相互转换
 
     */
 
    @Test
 
    public void testGenericListJson() {
 
       // 泛型List
 
       List<JavaBean> list = new ArrayList<JavaBean>();
 
       for(int i = 0; i < 3; i++) {
 
           JavaBean user = new JavaBean("100" + i, "name" + i, 20 + i, "BJ" + i);
 
           list.add(user);
 
       }
 
       System.out.println(list);
 
       
 
       // 泛型List -> Json
 
       java.lang.reflect.Type type =
 
           new com.google.gson.reflect.TypeToken<List<JavaBean>>(){}.getType();
 
       String json = gson.toJson(list, type);
 
       System.out.println(json); 
 
       
 
       // Json -> 泛型List
 
       List<JavaBean> users = gson.fromJson(json.toString(), type);
 
       System.out.println(users);
 
    }
 
    
 
    /**
 
     * Map转换成Json字符串
 
     */
 
    @Test
 
    public void testMap2Json() {
 
       // Map数据
 
       Map map = new HashMap();
 
       map.put("id", "1001");
 
       map.put("name", "scott");
 
       map.put("age", 20);
 
       map.put("addr", "BJ");
 
       System.out.println(map);
 
       
 
       // Map -> Json
 
       String json = gson.toJson(map);
 
       System.out.println(json);
 
    }
 
    
 
    /**
 
     * 泛型Map、Json相互转换
 
     */
 
    @Test
 
    public void testGenericMapJson() {
 
       // 泛型Map数据
 
       Map<String, JavaBean> map = new HashMap<String, JavaBean>();
 
       for(int i = 0; i < 5; i++) {
 
           JavaBean user = new JavaBean("100" + i, "name" + i, 20 + i, "LN" + i);
 
           map.put("100" + i, user);
 
       }
 
       System.out.println(map);
 
       
 
       // 泛型Map -> Json
 
       java.lang.reflect.Type type =
 
           new com.google.gson.reflect.TypeToken<Map<String, JavaBean>>(){}.getType();
 
       String json = gson.toJson(map, type);
 
       System.out.println(json); 
 
       
 
       // Json -> Map
 
       Map<String, JavaBean> users = gson.fromJson(json.toString(), type);
 
       System.out.println(users);
 
       
 
    }
 
    
 
    /**
 
     * 带日期类型Bean、Json相互转换
 
     */
 
    @Test
 
    public void testDateBeanJson() {
 
       // 日期Bean数据
 
       DateBean bean = new DateBean("1001", "scott", 20, new Date());
 
       
 
       // Bean(带日期属性) -> Json
 
       gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,
 
              new DateSerializerUtils()).setDateFormat(DateFormat.LONG).create();
 
       String json = gson.toJson(bean);
 
       System.out.println(json);
 
       
 
       // Json -> Bean(带日期类型属性)
 
       gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,
 
              new DateDeserializerUtils()).setDateFormat(DateFormat.LONG).create();
 
       java.lang.reflect.Type type =
 
           new com.google.gson.reflect.TypeToken<DateBean>(){}.getType();
 
       DateBean b = gson.fromJson(json, type);
 
       System.out.println(b);
 
    }
 
    /**
 
     * 泛型日期List、Json相互转换
 
     */
 
    @Test
 
    public void testDateGenericListJson() {
 
       // 泛型日期List
 
       List<DateBean> list = new ArrayList<DateBean>();
 
       for(int i = 0; i < 3; i++) {
 
           DateBean user = new DateBean("100" + i, "name" + i, 20 + i, new Date());
 
           list.add(user);
 
       }
 
       System.out.println(list);
 
       
 
       // 泛型日期List -> Json
 
       gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,
 
              new DateSerializerUtils()).setDateFormat(DateFormat.LONG).create();
 
       java.lang.reflect.Type type =
 
           new com.google.gson.reflect.TypeToken<List<DateBean>>(){}.getType();
 
       String json = gson.toJson(list, type);
 
       System.out.println(json); 
 
       
 
       // Json -> 泛型日期List
 
       gson = gsonBuilder.registerTypeAdapter(java.util.Date.class,
 
              new DateDeserializerUtils()).setDateFormat(DateFormat.LONG).create();
 
       List<DateBean> users = gson.fromJson(json.toString(), type);
 
       System.out.println(users);
 
    }
 
}

 

分享到:
评论

相关推荐

    java json api,json api

    总结来说,Java JSON API,特别是`json-lib`库,是Java开发者处理JSON数据的一个重要工具。它提供了一系列方便的API,使得JSON的创建、解析、转换变得简单,同时与其他数据格式如XML的交互也十分便捷。在理解并熟练...

    java 解析 json文件 java 解析 json文件

    总结来说,Java中解析JSON文件有多种方法,可以根据项目需求选择合适的库。Jackson和Gson通常更受开发者欢迎,因为它们提供了方便的数据绑定功能。无论选择哪种方式,都需要确保正确地映射JSON结构到Java对象,以便...

    java json 所有jar包

    总结,Java与JSON的交互涉及到多个库的选择和使用,如Jackson、Gson和Fastjson,它们都支持Map和ArrayList等Java对象与JSON之间的转换。理解这些库的API和JSON的基本语法,是高效处理JSON数据的关键。在实际项目中,...

    java json互转demo

    总结来说,Java与JSON的转换是一个关键的编程任务,JSON-LIB库提供了一种方便的方式来完成这个任务。通过学习和使用JSON-LIB,开发者可以轻松地在Java应用中处理JSON数据,无论是从JSON反序列化为Java对象,还是将...

    java服务端生成json(json服务端)

    总结来说,Java服务端生成JSON涉及的主要知识点包括: 1. JSON数据格式的理解及其在数据交换中的作用。 2. 使用Gson或FastJson库进行JSON序列化和反序列化。 3. 结合HTTP服务器框架处理JSON响应。 4. 调试和测试JSON...

    java json文档和示例

    总结,Java中处理JSON数据有多种方式,选择哪种库取决于项目需求和个人喜好。Jackson适合复杂的序列化场景,Gson易于使用,而org.json适合轻量级应用。了解并掌握这些库的使用,能有效提升你在Java项目中的JSON处理...

    JAVA 解析JSON格式数据

    总结,Java解析JSON主要依靠第三方库,如Jackson和Gson,它们提供了解析JSON字符串到Java对象,以及将Java对象序列化为JSON字符串的功能。对于复杂的JSON结构,可以通过创建相应的Java类来映射。在实际操作中,务必...

    java json 相关 jar 包

    总结,处理JSON在Java开发中是一项常见的任务,选择合适的JSON库至关重要。Jackson以其高性能和强大的功能深受开发者喜爱,Gson则以其简洁易用的API占有一席之地。在具体项目中,应根据需求和团队习惯来选择最适合的...

    json类库,Java解析json必用

    在Java中,处理JSON数据是常见的任务,尤其在开发Web服务、前后端交互等场景中。本篇文章将深入探讨Java中解析和生成JSON的类库,并介绍如何使用它们进行数据转换。 ### JSON的基本结构 JSON基于JavaScript语法,...

    Java解析JSON源码

    总结来说,Java解析JSON源码主要涉及选择合适的库,如`org.json`,然后使用其提供的类(如`JSONObject`和`JSONArray`)进行解析和生成。理解这些基本操作是Java开发中处理JSON数据的基础。通过不断实践和学习,你...

    java处理JSON数据

    总结,Java处理JSON数据涉及多个库,如Jackson、Gson和org.json,它们提供了不同的API来解析、创建、遍历和序列化/反序列化JSON。理解这些库的使用方式对于任何Java开发者来说都是至关重要的,特别是在处理Web服务和...

    使用java代码生成json文件和word文档!

    总结,使用Java生成JSON文件和Word文档需要理解数据序列化(如JSON)的概念,以及使用相关库(如Jackson和Apache POI)提供的API。通过这些库,你可以轻松地将Java对象转换为可读的JSON格式,或创建结构化的Word文档...

    Java JSON技术框架选型、测试及简单使用

    总结来说,Jackson作为Java中的JSON处理框架,因其强大的功能和优秀的性能,被广泛应用于各种Java项目中。正确选择和使用JSON库,不仅可以提高开发效率,还能优化程序性能。在实际项目中,开发者应根据需求评估各个...

    java拼接解析json

    总结来说,Java中处理JSON数据主要依赖于第三方库,如`org.json`或`com.google.gson`。通过这些库,我们可以轻松地创建、拼接、解析和转换JSON。在实际项目中,选择合适的库并熟练掌握其API,能有效提高开发效率。

    json转对象(java 多级嵌套)

    总结,Java中处理JSON到对象的转换,特别是面对多级嵌套的情况,关键在于理解JSON结构并构建相应的Java对象模型,然后利用如Jackson这样的库进行数据映射。通过熟练掌握这些工具和技巧,可以有效地在Java应用中处理...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    总结一下,Java中处理JSON数据时,可以使用`net.sf.json.JSONObject`类来完成JSON字符串到Java对象的转换。这个过程涉及将JSON对象转换为`JSONObject`,创建一个类映射,然后使用`toBean()`方法将JSON对象转换为对应...

    Java Json序列化与反序列化

    总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...

    Json与java对象之间相互转换源码

    总结一下,JSON与Java对象之间的相互转换是Java开发中常见的任务。通过使用Gson或Jackson这样的库,我们可以方便地实现这一目标,从而简化数据处理流程。在实际项目中,根据具体需求选择合适的库,并理解其基本用法...

    Java Json生成工具 源代码

    总结起来,这个Java JSON生成工具的主题为我们提供了一个实战性的学习机会,通过比较自编和教师版本的工具,我们可以深化对JSON处理的理解,学习如何评估和选择适合的工具,同时也能提升我们的代码审查和代码优化...

    Java json全套依赖包

    总结来说,这个“Java json全套依赖包”提供了一个便捷的方式,将各种常用的Java JSON处理库整合在一起,帮助开发者快速在项目中启用JSON功能,无论是简单的数据交换还是复杂的JSON操作,都能找到相应的解决方案。...

Global site tag (gtag.js) - Google Analytics