Json格式的数据怎么转换为json数据格式成List

Java中将JSON格式的数据转换成对应的Bean、Map、List数据
简单说明:
为了方便数据在客户端及服务器端的传输,有时候我们会用一些比较方便组织的数据类型,比如json、xml等传给客户端,客户端也可以重新组织数据传回服务器端。JSON和XML提供了一套比较方便的数据组织形式。。并且有很多现成的类库用于解析这些数据。。
本文是对net.sf.json使用后的总结。。目前官方开源的对json进行处理的项目很多,fastjson还有其它等等。。视自己处理问题的复杂程度考虑选择使用不同的依赖包。。
如果使用maven构建项目,需要对以下两个包进行依赖
&dependency& &
& & &groupId&net.sf.json-lib&/groupId& &
& & &artifactId&json-lib&/artifactId& &
& & &version&2.2.3&/version& &
&/dependency& &
&dependency& &
& & &groupId&xom&/groupId& &
& & &artifactId&xom&/artifactId& &
& & &version&1.2.5&/version& &
&/dependency& &
如果使用Eclipse自己构建项目,需要自己手动下载依赖包进行依赖。
示例程序:
1.将JSON组装的实体数据类型转换为中对应的简单Bean对象(只包含简单的数据类型)
&* 将json格式封装的简单实体类型数据转换成简单类型的javabean&
&* @return&
private static Object JSON2SimpleBean() { &
& & String jsonStr = &{\&age\&:23,\&id\&:123,\&name\&:\&tt_2009\&,& + &
& & & & & & &\&province\&:\&上海\&,\&sex\&:\&男\&}&; &
& & JSONObject jsonBean = JSONObject.fromObject(jsonStr); &
& & return JSONObject.toBean(jsonBean, SimpleUser.class); &
以上代码是将Json数据串转换成java中自定义的对应的简单bean。SimpleUser看最后代码附录。
2.将JSON组装的复杂数据转换成复杂的java数据实体(对象中包含其它复杂对象,如收货地址用List存储)
&* 将json格式封装的复杂实体数据转换成复杂类型的javabean&
&* @return&
private static Object JSON2ComplexBean() { &
& & String jsonStr = &{\&address\&:[\&北京\&,\&上海\&,\&广州\&],& + &
& & & & & & &\&age\&:23,\&id\&:123,\&name\&:\&tt_2009\&,\&province\&:\&上海\&,\&sex\&:\&男\&}&; &
& & JSONObject jsonBean = JSONObject.fromObject(jsonStr); &
& & return JSONObject.toBean(jsonBean, ComplexUser.class); &
以上代码将json组装的数据串转换成java中自定义的复杂数据实体。ComplexUser看最后附录代码。
3.将Json数据转换成java中的List
&* 将json格式封装的列表数据转换成java的List数据&
&* @return&
private static Object JSON2List() { &
& & String jsonArray = &
& & & & & & &[{\&age\&:23,\&id\&:123,\&name\&:\&tt_2009_0\&,\&province\&:\&上海\&,\&sex\&:\&男\&},& + &
& & & & & & &{\&age\&:24,\&id\&:123,\&name\&:\&tt_2009_1\&,\&province\&:\&上海\&,\&sex\&:\&男\&},& + &
& & & & & & &{\&age\&:32,\&id\&:123,\&name\&:\&tt_2009_9\&,\&province\&:\&上海\&,\&sex\&:\&男\&}]&; &
& & return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig()); &
以上代码将json组装的数据数据转换成java中的list数据。对更复杂的数据处理,后续文章介绍,比如处理日期等格式的数据。
4.将json数据转换成java中的Map。(注意key只能是字符串)
&* 将json格式封装的字符串数据转换成java中的Map数据&
&* @return&
private static Map&String, SimpleUser& JSON2Map() { &
& & Map&String, SimpleUser& map = new HashMap&String, SimpleUser&(); &
& & String jsonMapStr = &
& & & & & & &{\&tt_2009_4\&:{\&age\&:27,\&id\&:123,\&name\&:\&tt_2009_4\&,\&province\&:\&上海\&,\&sex\&:\&男\&},& + &
& & & & & & &\&tt_2009_6\&:{\&age\&:29,\&id\&:123,\&name\&:\&tt_2009_6\&,\&province\&:\&上海\&,\&sex\&:\&男\&},& + &
& & & & & & &\&tt_2009_0\&:{\&age\&:23,\&id\&:123,\&name\&:\&tt_2009_0\&,\&province\&:\&上海\&,\&sex\&:\&男\&}}&; &
& & JSONObject jsonMap = JSONObject.fromObject(jsonMapStr); &
& & Iterator&String& it = jsonMap.keys(); &
& & while(it.hasNext()) { &
& & & & String key = (String) it.next(); &
& & & & SimpleUser u = (SimpleUser) JSONObject.toBean( &
& & & & & & & & JSONObject.fromObject(jsonMap.get(key)), &
& & & & & & & & SimpleUser.class); &
& & & & map.put(key, u); &
以上实现的是将json组装的key-value格式的数据转换成java中的map。
附录代码:
(setter、getter等方法省略掉了)
&* 只包含基本数据类型的简单实体类&
&* @author TT_2009&
public class SimpleUser { &
& & private S &
& & private S &
& & private S &
&* 包含复杂类型的实体类&
&* @author TT_2009&
public class ComplexUser extends SimpleUser { &
& & private List&String& &
& & public ComplexUser() { &
& & public ComplexUser(int id, String name, &
& & & & & & String sex, int age, String province, &
& & & & & & List&String& address) { &
& & & & super(id, name, sex, age, province); &
& & & & this.address = &
& & public List&String& getAddress() { &
& & public void setAddress(List&String& address) { &
& & & & this.address = &一个简单的JSON 数据格式转换类 - ahuango - ITeye技术网站
博客分类:
在项目中使用JSON格式传输数据时经常碰到数据格式的转换, 一般可以使用Json.org的lib, 以及一些第三方的框架来完成。 但是如果只是一个简单的项目,而且json的使用并不多的情况下,可以自己写一个类来处理。
在代码中,我让我的Json类继承与TreeMap,这样可以利用Map与Json格式的相似性,节省一些代码量和定义数据结构的烦恼。 Json结构在前台支持基本数据类型和数据类型, 所以这样的数据类型在js中也是有效的:
{'1':'ha','2':'ch','3':['list1','list2','list3']}
依据这个格式,这个类只处理不同json格式和含有数组的数据类型的转换。代码如下,
public class Json extends TreeMap&String, Object& {
private static final long serialVersionUID = 1L;
public void add(String key, Object value) {
if (value instanceof String) {
value = JsonUtil.encode((String) value);
this.put(JsonUtil.encode(key), value);
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("{");
boolean first =
for (Iterator&Map.Entry&String, Object&& it = this.entrySet().iterator(); it.hasNext();) {
Map.Entry&String, Object& me = it.next();
Object temp = me.getValue();
if (!first)
sb.append(",");
sb.append("'" + me.getKey() + "':");
if (temp instanceof String || temp.getClass().isPrimitive()
|| temp.getClass().getName().startsWith("java.lang")) {
sb.append("'" + temp + "'");
} else if (temp instanceof Json) {
sb.append(((Json) temp).toString());
sb.append(temp.toString());
sb.append("}");
return sb.toString();
public String getStringValue(String key) {
return (String) this.get(key);
public int getIntValue(String key) {
String str = getStringValue(key);
if (str != null)
str = str.trim();
return new Integer(str).intValue();
public String firstKeyString() {
if (this == null || this.size() == 0)
throw new RuntimeException("The json map doesn't have any contents!");
return (String) this.keySet().iterator().next();
public Date getSqlDate(String key) {
String dateStr = getStringValue(key);
return java.sql.Date.valueOf(dateStr);
} catch (IllegalArgumentException e) {
}
另外有一个Util类来处理一些数据转换, 这个类相当于一个Factory, 也可以用你过来从String parse 一个Json Java对象,
public class JsonUtil {
public static Json parse(String json) {
Json js = new Json();
if (json == null || json.trim().length() == 0 || json.trim().length() == 2)
json = json.substring(1, json.length() - 1);
char[] chars = json.toCharArray();
for (int i = 0, n = chars. i &) {
StringBuffer sbKey = new StringBuffer();
while (chars[i] != ':' && i & n) {
if (chars[i] != '\'')
sbKey.append(chars[i]);
if (chars[i] == ':') {
StringBuffer sb = new StringBuffer();
int j = i + 1;
if (j & n && chars[j] == '{') {
int count = 0;
while (j & n && (chars[j] != '}' || count & 1)) {
if (chars[j] == '{')
if (chars[j] == '}')
sb.append(chars[j]);
if (j == n)
return new Json();
sb.append(chars[j]);
js.add(sbKey.toString(), parse(sb.toString()));
i = j + 1;
while (i & n && chars[i] == ',')
} else if (j & n && chars[j] == '[') {
int count = 0;
while (j & n && (chars[j] != ']' || count & 1)) {
if (chars[j] == '[')
if (chars[j] == ']')
sb.append(chars[j]);
if (j == n)
return new Json();
sb.append(chars[j]);
js.add(sbKey.toString(), buildList(sb.toString()));
i = j + 1;
while (i & n && chars[i] == ',')
} else if (j & n) {
while (j & n) {
if (chars[j] != '\'')
sb.append(chars[j]);
if (j & n - 1 && chars[j + 1] == ',') {
js.add(sbKey.toString(), sb.toString());
i = j + 2;
} else if (j == n - 1) {
js.add(sbKey.toString(), sb.toString());
i = j + 1;
js.add(sbKey.toString(), "");
public static List&String& buildList(String value) {
List&String& result = new ArrayList&String&();
if (value == null || value.trim().length() &= 2)
value = value.substring(1, value.length() - 1);
String[] members = value.split(",");
for (int i = 0, n = members. i & i++) {
String temp = members[i];
if (temp.startsWith("'"))
result.add(encode(temp.substring(1, temp.length() - 1)));
result.add(encode(temp));
public static String encode(String value) {
if (value == null)
return "";
char content[] = new char[value.length()];
value.getChars(0, value.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i & content. i++) {
switch (content[i]) {
case '\'':
result.append("\\x27");
case '\n':
result.append("\\x0A");
case '\r':
result.append("\\x0D");
result.append(content[i]);
return result.toString();
public static void main(String[] args) {
String js = "{'1':'ha','2':'ch','3':['lis't1','lis\nt2','lis\n\rt3']}";
Json json = JsonUtil.parse(js);
System.out.println(json);
这里处理了会对前台js识别Json数组有影响的字符, 包括['|\n|\r],这三个。 处理方法是用这些字符的ASCII码来代替,这样js不会把它当作特殊的字符处理比如回车符,而只有在这些字符显示出来的时候才会产生作用。
下载次数: 10
浏览: 32681 次
来自: 上海
我最近正在研究firefox截图,你的现在已经不兼容37,而且 ...JSONObject转换JSON--将Date转换为指定格式 - 上善若水任方圆 - ITeye技术网站
博客分类:
项目中,经常会用JSONObject插件将JavaBean或List&JavaBean&转换为JSON格式的字符串,而JavaBean的属性有时候会有java.util.Date这个类型的时间对象,这时JSONObject默认会将Date属性转换成这样的格式:
{"nanos":0,"time":-00,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}
而这种格式肯定是非常难以理解的,为了将Date转换为我们认识的“yyyy-MM-dd”格式,需要做以下操作。
首先创建一个时间转换器
public class JsonDateValueProcessor implements JsonValueProcessor {
private String format ="yyyy-MM-dd";
public JsonDateValueProcessor() {
public JsonDateValueProcessor(String format) {
this.format =
public Object processArrayValue(Object paramObject,
JsonConfig paramJsonConfig) {
return process(paramObject);
public Object processObjectValue(String paramString, Object paramObject,
JsonConfig paramJsonConfig) {
return process(paramObject);
private Object process(Object value){
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
return sdf.format(value);
return value == null ? "" : value.toString();
然后在调用JSONObject之前创建一个JsonConfig,并且将上一步定义的date转换器注册进去:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
最后将JsonConfig放入JSONObject对象中,这里针对不同的数据类型有多种方式放入JsonConfig:
JSONObject json = new JSONObject();
//Map转JSON
json.putAll(Map, jsonConfig);
JSONObject json = new JSONObject();
//JavaBean转JSON
json.fromObject(object, jsonConfig)
最后我们看到的结果就是只要JavaBean中有Date对象,转换成JSON字符串时就会变成“yyyy-MM-dd”格式。
浏览 47250
jingjdongdheaven 写道json.fromObject(object, jsonConfig)& 我走到这块儿老报错呢。严重: Servlet.service() for servlet DispatcherJsonServlet threw exceptionjava.lang.NoSuchMethodError: net.sf.json.JSONObject.fromObject(Ljava/lang/OLnet/sf/json/JsonC)Lnet/sf/json/JSONO确认你的object对象参数是一个JavaBean,我看你调用json.fromObject(object, jsonConfig) 中的object似乎是一个lang类型
json.fromObject(object, jsonConfig)& 我走到这块儿老报错呢。严重: Servlet.service() for servlet DispatcherJsonServlet threw exceptionjava.lang.NoSuchMethodError: net.sf.json.JSONObject.fromObject(Ljava/lang/OLnet/sf/json/JsonC)Lnet/sf/json/JSONO
浏览: 2022183 次
来自: 成都
博主 你好,请教个问题 公司产品之前有个日期表月视图,版本是1 ...
好像有道理!!
super.printJsMsg(response, sb.t ...
受教了!分享一个Dubbo分布式架构项目实战参考内容:http ...2015年2月 总版技术专家分月排行榜第二
2015年2月 Web 开发大版内专家分月排行榜第一2015年1月 Web 开发大版内专家分月排行榜第一2014年12月 Web 开发大版内专家分月排行榜第一2014年11月 Web 开发大版内专家分月排行榜第一2014年10月 Web 开发大版内专家分月排行榜第一
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2015年2月 Java大版内专家分月排行榜第二2014年3月 Java大版内专家分月排行榜第二
2014年9月 Java大版内专家分月排行榜第三2014年6月 Java大版内专家分月排行榜第三2014年2月 Java大版内专家分月排行榜第三2013年11月 Java大版内专家分月排行榜第三2013年10月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。java对象集合转json格式 -
- ITeye技术网站
博客分类:
原文来自:
我有三个集合ArrayList&Student& list = new ArrayList&Student&();ArrayList&Classes& list1 = new ArrayList&Classes&();ArrayList&Teacher& list2 = new ArrayList&Teacher&();分别对应三个实体,人数据库里取出了数据,现在要把这三个集合组成一个json{student:{id:1,name:11},classes:{id:2,name:2},teacher:{id:3,name:3}}请问有什么办法可以做到这样子的json格式。
该问题被发起关闭投票
投票剩余时间:(/3)
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:(/3)
发起了声誉值为 分的悬赏
距离悬赏到期还有:
&!--问题已经关闭_begin--&
该问题已经在很久很久以前被关闭
参与关闭投票者:
关闭原因:
该问题如果有必要重新开启?
&!--问题已被锁定_begin--&
该问题已经被锁定
锁定原因:()
&!--问题已被保护_begin--&
该问题已被保护
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
&!--问题已经成功删除_begin--&
该问题已成功删除,仅对您可见,其他人不能够查看。
评论 (3)o o o  
您的投票让
声誉值增加了10分。
支持投票,不仅能让回答用户获得声誉值,让好答案排序靠前,更能帮助社区筛选出好的内容,构建高质量的知识库。
List list = new ArrayList();JSONObject obj = new JSONObject();obj.put("text", "Absolute");obj.put("id", "absolute");list.add(obj);JSONArray jsonList = JSONArray.fromObject(list);格式差不多就这样的,你可以借鉴一下。
该答案已被锁定,无法对其进行评论,编辑及投票。
评论 (0)o o
您的投票让
声誉值增加了10分。
支持投票,不仅能让回答用户获得声誉值,让好答案排序靠前,更能帮助社区筛选出好的内容,构建高质量的知识库。
有2中方法,一种是用现有的json工具类直接转换,二就是自己组装成json。
第一种推荐用fastjson等,那fastjson来说,List&Object& list = new ArrayList&Object&;//定义一个list列表list.add(new Arraylist&Student&);//添加学生列表list.add(new Arraylist&Classes&);//添加课程列表list.add(new Arraylist&Teacher&);//添加老师列表上面就是组装成了对象形式,最后调用fastjson的JSON.toJsonString(list);这样得到的就是json格式的字符串,里面具体实现不用你考虑。
第二种自己来组装json。组装json使用格式的,类似键值对是map型,而[]这样的就是list型先定义最外面的jsonJsonObject json = new JsonObject();JSONArray students = new JSONArray();//学生类json数组JsonObject student= new JsonObject();//一个学生类jsonstudents.put(student);//将学生类添加进学生类json数组....同理得到课程json数组和老师json数组
最后,添加到大的json里面json.put(students );json.put(classes);json.put(teachers );
json就是最终的结果了
下载次数: 44
浏览: 288336 次
来自: 上海
你好,我需要FishermanJCE,请问能发份这个包给我么? ...
你好,我也需要这个例子的依赖的FishermanJCE相关的包 ...
json序列化反序列化插件-json2.js 介绍和使用 -
FishermanJCE 是山东渔翁公司加密卡提供调用加密机/ ...
好像要用起来还需好多包啊。。。。。
我设置了
Security ...

我要回帖

更多关于 list转换为json格式 的文章

 

随机推荐