1)JSON简介
2)JSON/LIST转换
3)JSON/MAP转换
4)JSON/动态Bean转换
5)JSON/静态Bean转换
6)JSON/XML输出
1.JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript,但是不仅仅限于此。
详情可以参考www.json.org
例如一段XML
<?xml version="1.0" encoding="utf-8"?>
<shop>
<name>饭店</name>
<city>北京</city>
</shop>
用JSON表示如下:
{
"name":"饭店",
"city":"北京"
}
XML的解析得考虑子节点父节点关系,而JSON的解析难度相当低,很多控件,尤其是ajax相关的数据交换很多都用json.
2)JSON/LIST转换
本教程解析采用的json-lib,官方网站为http://json-lib.sourceforge.net/ ,本教程参考官方教程
环境需要配置的jar如下
commons-beanutils和ezmorph控制反射
commons-collections是apachecommons的子项目,扩展了java集合类
commons-lang扩展了java.lang包
commons-logging日志类
xom是xml解析类,可以参考www.xom.nu
junit单元测试用的jar
json-lib核心jar
项目文件夹中拥有货物参数(Shop)和货物参数列表(ShopList)两个实体
Shop包含name和property两个字段,ShopList包含Shop的列表
对应的json是
String s = "[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'},{name:'显卡类型 ',property:'p3'},{name:'硬盘容量',property:'p4'},{name:'处理器',property:'p5'}, {name:'内存',property:'p6'},{name:'型号',property:'p7'},{name:'货号 ',property:'p8'},{name:'品牌',property:'p9'}]";
把这样的数据结构作为用户定义个人信息存入数据库可以达到个性化参数的作用,
比如shopex的数据库中很多表就是用的json数据类型。因为用户自己添加的参数的长度是不固定的
比如上述例子就拥有9个用户自定义的参数
当用户需要填写这些参数的时候,需要转化为list,然后在struts2的view去显示
完成的代码可以参考附件的ArrayUtil文件
核心代码仅仅就一行JSONArray jsonArray = JSONArray.fromObject(s);
得到这个jsonArray后要转化为ArrayList,需要用循环遍历,如下
for (int i = 0; i < jsonArray.size(); i++) {
Object o = jsonArray.get(i);
JSONObject jsonObject = JSONObject.fromObject(o);
Shop Person = (Shop) JSONObject.toBean(jsonObject, Shop.class);
list.add(Person);
}
然后得到的list就是普通的ArrayList了
3)JSON/MAP转换
当我们初始化完一个map,放入json可以直接放入
Map<String, String> map = new HashMap<String, String>();
map.put("name", "重量");
map.put("property", "p1");
JSONObject jsonObject = JSONObject.fromObject(map);
核心代码为
JSONObject jsonObject = JSONObject.fromObject(map);
JsonLib会自动映射
完成例子见附件MapUtil.java
4)JSON/动态Bean转换
所谓动态bean即是java运行的时候根据情况创建的,而不是程序员已经好了的Bean
JsonLib会自动根据Json格式数据创建字段,然后创建一个包含这些字段的Object
本例子中采用JUNIT做单元测试验证,见DynamicBean.java
String s = "{name:'重量',property:'p1'}";
JSONObject jsonObject = JSONObject.fromObject(s);
Object bean = JSONObject.toBean(jsonObject);
assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean,"name"));
assertEquals(jsonObject.get("property"), PropertyUtils.getProperty(bean,"property"));
5)JSON/静态Bean转换(StaticBean.java)
JSONLIB在转换的时候会自动查找关系,比如子类和父类
例如JSON数据源
String s = "{'shopList':[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'}, {name:'显卡类型',property:'p3'},{name:'硬盘容量',property:'p4'},{name:'处理器 ',property:'p5'},{name:'内存',property:'p6'},{name:'型号',property:'p7'}, {name:'货号',property:'p8'},{name:'品牌',property:'p9'}]}";
存入Map
map.put("shopList", Shop.class);
ShopList shopList = (ShopList) JSONObject.toBean(JSONObject.fromObject(s), ShopList.class, map);
JSONObject.toBean()方法的三个参数分别表示数据源对应的JSON对象,转化后的对象ShopList和数据源map
然后这样也可以取得ShopList
这种方法和动态转换的区别在于,动态转换仅仅只是转为Object
而静态转换是转换为已经定义过的实体类,会自动映射(这点类似Ibatis)
6)JSON/XML输出
如果自己用String的方法转化为XML输出要写很多代码,然后条用JSONLIB,核心代码仅仅一步
String xmlObject = xmlSerializer.write(object);
比如
String s = "{name:'重量',property:'p1'}";
XMLSerializer xmlSerializer = new XMLSerializer();
JSONObject object = JSONObject.fromObject(s);
String xmlObject = xmlSerializer.write(object);
System.out.println(xmlObject);
输出结果为
<?xml version="1.0" encoding="UTF-8"?>
<o>
<name type="string">重量</name>
<property type="string">p1</property>
</o>
json-lib 将list或者对象转化为json格式
1 示例说明:
list -> json:
Student[] stus = new Student[5];
List<Student> stuList = new ArrayList<Student>();
for (int i = 0; i < stus.length; i++) {
stus[i] = new Student();
stus[i].setAge(i*10+8);
stus[i].setName("张三"+i);
stus[i].setSex("和");
//添加到list,一会儿用
stuList.add(stus[i]);
}
JSONArray jsonArray = JSONArray.fromObject(stus);
System.out.println(jsonArray);
对象(Student)-->json:
Student student = new Student();
student.setAge(18);
student.setName("zhangsan");
student.setSex("male");
JSONObject jsonObject = JSONObject.fromObject(student);
System.out.println(jsonObject);
map+list --> json:
Student[] stus = new Student[5];
List<Student> stuList = new ArrayList<Student>();
for (int i = 0; i < stus.length; i++) {
stus[i] = new Student();
stus[i].setAge(i * 10 +;
stus[i].setName("张三" + i);
stus[i].setSex("和");
// 添加到list,一会儿用
stuList.add(stus[i]);
}
Map<String, Object> map = new HashMap<String, Object>();
Teacher teacher = new Teacher();
teacher.setAge(30);
teacher.setName("laoshi");
teacher.setSex("male");
map.put("teacher", teacher);
map.put("student", stuList);
JSONObject jsonObjectFromMap = JSONObject.fromObject(map);
System.out.println(jsonObjectFromMap);
2)JSON/LIST转换
3)JSON/MAP转换
4)JSON/动态Bean转换
5)JSON/静态Bean转换
6)JSON/XML输出
1.JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript,但是不仅仅限于此。
详情可以参考www.json.org
例如一段XML
<?xml version="1.0" encoding="utf-8"?>
<shop>
<name>饭店</name>
<city>北京</city>
</shop>
用JSON表示如下:
{
"name":"饭店",
"city":"北京"
}
XML的解析得考虑子节点父节点关系,而JSON的解析难度相当低,很多控件,尤其是ajax相关的数据交换很多都用json.
2)JSON/LIST转换
本教程解析采用的json-lib,官方网站为http://json-lib.sourceforge.net/ ,本教程参考官方教程
环境需要配置的jar如下
commons-beanutils和ezmorph控制反射
commons-collections是apachecommons的子项目,扩展了java集合类
commons-lang扩展了java.lang包
commons-logging日志类
xom是xml解析类,可以参考www.xom.nu
junit单元测试用的jar
json-lib核心jar
项目文件夹中拥有货物参数(Shop)和货物参数列表(ShopList)两个实体
Shop包含name和property两个字段,ShopList包含Shop的列表
对应的json是
String s = "[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'},{name:'显卡类型 ',property:'p3'},{name:'硬盘容量',property:'p4'},{name:'处理器',property:'p5'}, {name:'内存',property:'p6'},{name:'型号',property:'p7'},{name:'货号 ',property:'p8'},{name:'品牌',property:'p9'}]";
把这样的数据结构作为用户定义个人信息存入数据库可以达到个性化参数的作用,
比如shopex的数据库中很多表就是用的json数据类型。因为用户自己添加的参数的长度是不固定的
比如上述例子就拥有9个用户自定义的参数
当用户需要填写这些参数的时候,需要转化为list,然后在struts2的view去显示
完成的代码可以参考附件的ArrayUtil文件
核心代码仅仅就一行JSONArray jsonArray = JSONArray.fromObject(s);
得到这个jsonArray后要转化为ArrayList,需要用循环遍历,如下
for (int i = 0; i < jsonArray.size(); i++) {
Object o = jsonArray.get(i);
JSONObject jsonObject = JSONObject.fromObject(o);
Shop Person = (Shop) JSONObject.toBean(jsonObject, Shop.class);
list.add(Person);
}
然后得到的list就是普通的ArrayList了
3)JSON/MAP转换
当我们初始化完一个map,放入json可以直接放入
Map<String, String> map = new HashMap<String, String>();
map.put("name", "重量");
map.put("property", "p1");
JSONObject jsonObject = JSONObject.fromObject(map);
核心代码为
JSONObject jsonObject = JSONObject.fromObject(map);
JsonLib会自动映射
完成例子见附件MapUtil.java
4)JSON/动态Bean转换
所谓动态bean即是java运行的时候根据情况创建的,而不是程序员已经好了的Bean
JsonLib会自动根据Json格式数据创建字段,然后创建一个包含这些字段的Object
本例子中采用JUNIT做单元测试验证,见DynamicBean.java
String s = "{name:'重量',property:'p1'}";
JSONObject jsonObject = JSONObject.fromObject(s);
Object bean = JSONObject.toBean(jsonObject);
assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean,"name"));
assertEquals(jsonObject.get("property"), PropertyUtils.getProperty(bean,"property"));
5)JSON/静态Bean转换(StaticBean.java)
JSONLIB在转换的时候会自动查找关系,比如子类和父类
例如JSON数据源
String s = "{'shopList':[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'}, {name:'显卡类型',property:'p3'},{name:'硬盘容量',property:'p4'},{name:'处理器 ',property:'p5'},{name:'内存',property:'p6'},{name:'型号',property:'p7'}, {name:'货号',property:'p8'},{name:'品牌',property:'p9'}]}";
存入Map
map.put("shopList", Shop.class);
ShopList shopList = (ShopList) JSONObject.toBean(JSONObject.fromObject(s), ShopList.class, map);
JSONObject.toBean()方法的三个参数分别表示数据源对应的JSON对象,转化后的对象ShopList和数据源map
然后这样也可以取得ShopList
这种方法和动态转换的区别在于,动态转换仅仅只是转为Object
而静态转换是转换为已经定义过的实体类,会自动映射(这点类似Ibatis)
6)JSON/XML输出
如果自己用String的方法转化为XML输出要写很多代码,然后条用JSONLIB,核心代码仅仅一步
String xmlObject = xmlSerializer.write(object);
比如
String s = "{name:'重量',property:'p1'}";
XMLSerializer xmlSerializer = new XMLSerializer();
JSONObject object = JSONObject.fromObject(s);
String xmlObject = xmlSerializer.write(object);
System.out.println(xmlObject);
输出结果为
<?xml version="1.0" encoding="UTF-8"?>
<o>
<name type="string">重量</name>
<property type="string">p1</property>
</o>
json-lib 将list或者对象转化为json格式
1 示例说明:
list -> json:
Student[] stus = new Student[5];
List<Student> stuList = new ArrayList<Student>();
for (int i = 0; i < stus.length; i++) {
stus[i] = new Student();
stus[i].setAge(i*10+8);
stus[i].setName("张三"+i);
stus[i].setSex("和");
//添加到list,一会儿用
stuList.add(stus[i]);
}
JSONArray jsonArray = JSONArray.fromObject(stus);
System.out.println(jsonArray);
对象(Student)-->json:
Student student = new Student();
student.setAge(18);
student.setName("zhangsan");
student.setSex("male");
JSONObject jsonObject = JSONObject.fromObject(student);
System.out.println(jsonObject);
map+list --> json:
Student[] stus = new Student[5];
List<Student> stuList = new ArrayList<Student>();
for (int i = 0; i < stus.length; i++) {
stus[i] = new Student();
stus[i].setAge(i * 10 +;
stus[i].setName("张三" + i);
stus[i].setSex("和");
// 添加到list,一会儿用
stuList.add(stus[i]);
}
Map<String, Object> map = new HashMap<String, Object>();
Teacher teacher = new Teacher();
teacher.setAge(30);
teacher.setName("laoshi");
teacher.setSex("male");
map.put("teacher", teacher);
map.put("student", stuList);
JSONObject jsonObjectFromMap = JSONObject.fromObject(map);
System.out.println(jsonObjectFromMap);
发表评论
-
eclipse插件安装
2016-04-18 12:33 5741.eclipse中安装freemarker插件及ft ... -
Eclipse安装Freemarker插件
2016-03-03 14:39 0方法一:手动安装 手动安装没有成功 步骤: 1. 下载 ... -
svn配置强制添加注释(Windows/Linux版)
2016-03-03 13:45 1016Windows版本: SVN的仓 ... -
spring applicationContext 和webApplicationContext 区别
2015-11-19 12:33 6567Spring中 ... -
java三种表现层技术:jsp、freemarker、velocity
2015-09-30 11:13 951在java领域,表现层技术主要有三种:jsp、freemark ... -
Java学习笔记之Pattern类的用法详解(正则表达式)
2015-09-18 16:11 0java.util.regex.Pattern (摘 ... -
Java学习笔记之Pattern类的用法详解(正则表达式)
2015-09-18 16:11 1349java.util.regex.Pattern (摘 ... -
Eclipse提速
2015-09-01 09:42 387调整Eclipse的Preferences Gener ... -
Eclipse 中自动插入作者、注释日期等快捷键方法
2015-03-05 14:07 8007例如: /** * @param * @re ... -
集合类说明及区别
2015-02-03 09:51 702Collection ├List │├Link ... -
JAVA createSQLQuery().list()返回日期格式没有时分秒的解决方法
2015-01-21 14:50 1941在开发web项目中,发现提取Oracle中某 ... -
网址记录
2014-08-12 17:12 0SVN中的Branches分支以及Tags标签详解与应用举例 ... -
web.xml配置context-param和init-param区别
2014-08-11 09:38 0web.xml里面可以定义两 ... -
URL传递中文乱码解决方法
2014-08-07 15:03 626.encodeURL函数主要是来对URI来做转码,它默认是 ... -
Java开发常用开源项目
2014-08-06 11:45 0J2EE常用开源项目 activation 与j ... -
Java高级工程师需要掌握的技术
2014-08-04 15:01 678 -
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/Lin
2014-07-25 15:14 2236发送邮件: package com.demo.co ... -
JSP中的两种包含页面的方法
2014-07-25 14:59 0//第一种:include指令:当JSP转换成 ... -
J2SE 5.0 提供的简单的批注类型
2014-07-25 09:32 0J2SE 5.0 提供的简单的批 ... -
JAVA常用技术
2014-07-10 17:00 01.FreeMarker 是一个模板 ...
相关推荐
角库启动器 通用,AOT,Web Worker就绪的lib启动程序。 用于您的Angular库 入门 叉这个 ...该入门程序为您的lib准备了2种不同类型的构建 ESM或ES2015模块 此版本是将您的Typescript代码转换为ES5和ES20
软件模块说明UI设计GUI采用TouchGFX来设计,目前采用的版本是TouchGFX 4.15.0,主要分为3个主要界面:主页、系统设置和历史温度数据分析,分别如下图图1、图2和图3所示。 TouchGFX官方介绍 TouchGFX 4.13 版本是继...
例子Node.js 浏览器历史执照 入门 本地开发环境git clone https://github.com/TypeFox/monaco-languageclient.gitcd monaco-languageclientyarn 吉普特只需在Gitpod中启动全新的开发环境即可。 Gitpod是适用于GitHub...
有没有快速入门的指南或者示例代码? 4. **文档**:查看是否有详细的文档,包括功能解释、用法示例、配置选项以及可能的错误处理。 5. **兼容性**:确认`am_j2c_2.1`是否支持不同的浏览器或Node.js版本,这对于...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...
3. **版本控制系统**:如Git,用于管理代码版本,跟踪更改历史。 4. **构建工具**:如Maven(Java)、Gradle或npm(JavaScript),帮助自动化构建过程,包括编译、打包和依赖管理。 5. **框架**:如Spring(Java)...
2.1.6 历史记录对象 2.2 基本事件处理 2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS ...
2.1.6 历史记录对象 2.2 基本事件处理 2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS ...