`
dicmo
  • 浏览: 68538 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

json-lib 入门

阅读更多
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入门

    在本文中,我们将探讨`json-lib`的入门知识,包括其主要功能、使用方法以及如何通过提供的源码和工具进行学习和开发。 首先,`json-lib`的主要功能是将Java对象转换成JSON格式的字符串,同时也能将JSON字符串反序列...

    JSon-lib入门学习文档

    入门学习JSon-lib2.4,首先需要了解以下几个关键概念: 1. **JSON对象**:在JSON中,对象是一个无序的键值对集合,用花括号{}包裹。每个键都是一个字符串,后面跟着一个冒号,冒号后面是对应的值,键值对之间用逗号...

    JSON-LIB快速入门(转)

    JSON-LIB快速入门指南 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON-LIB是一个Java库,用于将Java对象转换为JSON格式,反之亦然。这篇文章...

    JSON-LIB快速入门

    在JSON-LIB的快速入门中,我们首先需要了解JSON的基本结构。JSON主要由两种基本类型构成:对象和数组。对象是以花括号{}包围的键值对集合,键是字符串,值可以是各种JSON数据类型,如字符串、数字、布尔值、null、...

    JSON从入门到精通,JSON与action的结合,json-lib等

    JSON从入门到精通,JSON与action的结合,json-lib等

    json-search-core-lib

    **标题解析:** "json-search-core-lib" 是一个专门针对JSON数据进行搜索操作的核心库。这个库可能提供了高效且灵活的API,使得开发者能够轻松地按照特定路径在JSON对象或数组中查找所需的信息。 **描述解析:** ...

    json入门讲解的总结

    在Java中,如果要将后台的集合数据转换为JSON格式,通常需要引入一些第三方库,如json-lib。这个库提供了将Java对象转化为JSON字符串以及将JSON字符串转化为Java对象的功能。需要的jar包有json-lib-2.3-jdk15.jar,...

    simple-jsonrpc-js:简单的jsonrpc javascript库。 生成并解析json rpc消息

    script src =" https://cdn.privex.io/lib/simple-jsonrpc/master/simple-jsonrpc-js.min.js " &gt; &lt;/ script &gt; &lt; script &gt; // Create a Simple-JsonRPC object which can call ...

    react-lib:React库入门模板

    用于通过npm分发的React组件库的入门模板。 技术领域 React Webpack 巴别塔 样式化的组件 笑话 酵素 如何使用此存储库作为模板 克隆此仓库的主分支: $ git clone --single-branch ...

    Struts2 json插件入门指南.pdf

    ### Struts2 JSON插件入门知识点详解 #### 1. 依赖包 - **Struts2 必需的 6 个 jar 包** - `commons-fileupload-1.2.2.jar`: 提供了文件上传功能的支持。 - `commons-io-2.0.1.jar`: 用于处理I/O操作,简化输入...

    微信jssdk开发java+jsp源码

    微信开发入门教程 jssdk,通过config接口注入权限验证配置java+jsp微信开发教程,功能:扫描...包含json相关依赖jar包,json-lib-2.3-jdk15.jar,ezmorph-1.0.6.jar,以及httpclient-4.5.3.jar,httpcore-4.4.6.jar等。

    googleads-php-lib:适用于PHP的Google Ads API客户端库(AdWords和Ad Manager)

    在该库的composer.json中可以找到系统要求和依赖性。 有关更多详细信息,请参。 该库取决于 。 如果您尚未在计算机上安装它,请遵循或。 在本指南的其余部分中,我们假设您使用的是Linux / Unix / OS X,并且已安装...

    react-lib:React库的项目模板

    使用您的项目详细信息更新package.json 更新README.md和CHANGELOG.md 生成项目: yarn build生成或npm run build 验证输出束的尺寸与yarn size或npm run size yarn lint项目: yarn lint或npm run lint 运行单元...

    (知识引用自)廖雪峰-JavaScript-Python-Git-教程-by-it-ebooks-_z-lib.org_1

    15. **标准对象**:如Date处理日期时间,RegExp处理正则表达式,JSON用于数据序列化和反序列化。 16. **面向对象编程**:JavaScript支持基于原型的面向对象,包括创建对象、原型继承、构造函数、this关键字等。 17...

    iso-lib-starter:使用汇总创建可重用的,现代的,同构的javascript库的入门者

    iso-lib-starter 使用汇总创建可重用的,现代的,同构的javascript库的入门程序。 要求 用法 生成新的存储库 打开终端, clone并cd到新的存储库中 在终端中时,复制,粘贴并在以下脚本中运行以设置公用文件 ( # ...

    typescript-lib-starter:用于现代TypeScript库的Stater套件。 生成准备在npm上发布的JS

    TypeScript库启动器 适用于现代TypeScript库的入门工具包。 生成准备在npm上发布JavaScript。 包括电池。 时期。 和用于格式化和整理用于测试执行进行测试和代码覆盖用于测试报告工作流程的配置文件克隆仓库$ git ...

Global site tag (gtag.js) - Google Analytics