常用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 }
3 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-lib`库,是Java开发者处理JSON数据的一个重要工具。它提供了一系列方便的API,使得JSON的创建、解析、转换变得简单,同时与其他数据格式如XML的交互也十分便捷。在理解并熟练...
总结来说,Java中解析JSON文件有多种方法,可以根据项目需求选择合适的库。Jackson和Gson通常更受开发者欢迎,因为它们提供了方便的数据绑定功能。无论选择哪种方式,都需要确保正确地映射JSON结构到Java对象,以便...
总结,Java与JSON的交互涉及到多个库的选择和使用,如Jackson、Gson和Fastjson,它们都支持Map和ArrayList等Java对象与JSON之间的转换。理解这些库的API和JSON的基本语法,是高效处理JSON数据的关键。在实际项目中,...
总结来说,Java与JSON的转换是一个关键的编程任务,JSON-LIB库提供了一种方便的方式来完成这个任务。通过学习和使用JSON-LIB,开发者可以轻松地在Java应用中处理JSON数据,无论是从JSON反序列化为Java对象,还是将...
总结,Java中处理JSON数据有多种方式,选择哪种库取决于项目需求和个人喜好。Jackson适合复杂的序列化场景,Gson易于使用,而org.json适合轻量级应用。了解并掌握这些库的使用,能有效提升你在Java项目中的JSON处理...
总结来说,Java服务端生成JSON涉及的主要知识点包括: 1. JSON数据格式的理解及其在数据交换中的作用。 2. 使用Gson或FastJson库进行JSON序列化和反序列化。 3. 结合HTTP服务器框架处理JSON响应。 4. 调试和测试JSON...
总结,Java解析JSON主要依靠第三方库,如Jackson和Gson,它们提供了解析JSON字符串到Java对象,以及将Java对象序列化为JSON字符串的功能。对于复杂的JSON结构,可以通过创建相应的Java类来映射。在实际操作中,务必...
总结,处理JSON在Java开发中是一项常见的任务,选择合适的JSON库至关重要。Jackson以其高性能和强大的功能深受开发者喜爱,Gson则以其简洁易用的API占有一席之地。在具体项目中,应根据需求和团队习惯来选择最适合的...
在Java中,处理JSON数据是常见的任务,尤其在开发Web服务、前后端交互等场景中。本篇文章将深入探讨Java中解析和生成JSON的类库,并介绍如何使用它们进行数据转换。 ### JSON的基本结构 JSON基于JavaScript语法,...
总结来说,Java解析JSON源码主要涉及选择合适的库,如`org.json`,然后使用其提供的类(如`JSONObject`和`JSONArray`)进行解析和生成。理解这些基本操作是Java开发中处理JSON数据的基础。通过不断实践和学习,你...
总结,Java处理JSON数据涉及多个库,如Jackson、Gson和org.json,它们提供了不同的API来解析、创建、遍历和序列化/反序列化JSON。理解这些库的使用方式对于任何Java开发者来说都是至关重要的,特别是在处理Web服务和...
总结,使用Java生成JSON文件和Word文档需要理解数据序列化(如JSON)的概念,以及使用相关库(如Jackson和Apache POI)提供的API。通过这些库,你可以轻松地将Java对象转换为可读的JSON格式,或创建结构化的Word文档...
总结来说,Jackson作为Java中的JSON处理框架,因其强大的功能和优秀的性能,被广泛应用于各种Java项目中。正确选择和使用JSON库,不仅可以提高开发效率,还能优化程序性能。在实际项目中,开发者应根据需求评估各个...
总结来说,Java中处理JSON数据主要依赖于第三方库,如`org.json`或`com.google.gson`。通过这些库,我们可以轻松地创建、拼接、解析和转换JSON。在实际项目中,选择合适的库并熟练掌握其API,能有效提高开发效率。
总结,Java中处理JSON到对象的转换,特别是面对多级嵌套的情况,关键在于理解JSON结构并构建相应的Java对象模型,然后利用如Jackson这样的库进行数据映射。通过熟练掌握这些工具和技巧,可以有效地在Java应用中处理...
总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...
总结一下,Java中处理JSON数据时,可以使用`net.sf.json.JSONObject`类来完成JSON字符串到Java对象的转换。这个过程涉及将JSON对象转换为`JSONObject`,创建一个类映射,然后使用`toBean()`方法将JSON对象转换为对应...
总结一下,JSON与Java对象之间的相互转换是Java开发中常见的任务。通过使用Gson或Jackson这样的库,我们可以方便地实现这一目标,从而简化数据处理流程。在实际项目中,根据具体需求选择合适的库,并理解其基本用法...
总结起来,这个Java JSON生成工具的主题为我们提供了一个实战性的学习机会,通过比较自编和教师版本的工具,我们可以深化对JSON处理的理解,学习如何评估和选择适合的工具,同时也能提升我们的代码审查和代码优化...
总结来说,这个“Java json全套依赖包”提供了一个便捷的方式,将各种常用的Java JSON处理库整合在一起,帮助开发者快速在项目中启用JSON功能,无论是简单的数据交换还是复杂的JSON操作,都能找到相应的解决方案。...