- 浏览: 257050 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
nanfei:
运行没看到反应~
Android利用Http下载文件 -
jebai0521:
学习了,有点错误!
Android利用Http下载文件 -
avalonzst:
mark一下.写的真不错.
Oracle中的DDL语句 -
284772894:
Good,不错,新手学习中
android中的布局 -
zhiwen2050:
<script>alert("张三&qu ...
grid++ report在线报表的使用笔记
json-lib入门学习
- 博客分类:
- j2se
json-lib入门学习
1 Using the JSONSerializer
JSONSerializer can transform(改变) any java object to JSON notation(标记) and back with a simple and clean interface, leveraging(杠杆作用) all the builders in JSONObject and JSONArray. To transform a java obect into JSON use JSONSerializer.toJSON(). To transform a valid JSON value (by JSON, I mean an Object implementing that interface), use toJava(). The last method is an instance method because the serializer needs special configuration to transform a JSON value to a bean class, array, List or DynaBean.
2 Working with arrays and collections(JSONArray)
The simplest way to create a JSONArray from a java array or collection is through the static factory methods from JSONArray. JSONArray.fromObject() will inspect(检查) its parameter and call the correct factory or constructor.
2.1 Examples:
2.1.1 Array
boolean[] boolArray = new boolean[]{true,false,true};
JSONArray jsonArray = JSONArray.fromObject( boolArray );
System.out.println( jsonArray );
// prints [true,false,true]
2.1.2 List
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray = JSONArray.fromObject( list );
System.out.println( jsonArray );
// prints ["first","second"]
2.1.3 String
JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );
System.out.println( jsonArray );
// prints ["json","is","easy"]
3 Working with objects(JSONObject)
3.1 From Beans & Maps to JSON
The simplest way to create a JSONObject from a bean or Map is through the static factory methods from JSONObject. JSONObject.fromObject() will inspect its parameter and call the correct factory or constructor.
3.1.1 Examples:
Map map = new HashMap();
map.put( "name", "json" );
map.put( "bool", Boolean.TRUE );
map.put( "int", new Integer(1) );
map.put( "arr", new String[]{"a","b"} );
map.put( "func", "function(i){ return this.arr[i]; }" );
JSONObject jsonObject = JSONObject.fromObject( map );
System.out.println( jsonObject );
// prints ["name":"json","bool":true,"int":1,"arr":["a","b"],"func":function(i){ return this.arr[i]; }]
3.1.2 CAUTION:
when parsing, JSONObject and JSONArray will check for cycles in the hierarchy(层次), throwing an exception if one is found. You can change this behavior by registering a CycleDetectionStrategy.
3.2 From JSON to Beans
Json-lib can transform JSONObjects to either a DynaBean or an specific bean class.
When using DynaBean all arrays are converted to Lists, when using an specific bean class the transformation will use type conversion if necessary on array properties.
3.2.1 Convert to DynaBean:
String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";
JSONObject jsonObject = JSONObject.fromObject( json );
Object bean = JSONObject.toBean( jsonObject );
assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );
assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );
assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );
assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );
assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );
List expected = JSONArray.toList( jsonObject.getJSONArray( "array" ) );
Assertions.assertListEquals( expected, (List) PropertyUtils.getProperty( bean, "array" ) );
3.2.2 Convert to Bean:
String json = "{bool:true,integer:1,string:\"json\"}";
JSONObject jsonObject = JSONObject.fromObject( json );
BeanA bean = (BeanA) JSONObject.toBean( jsonObject, BeanA.class );
assertEquals( jsonObject.get( "bool" ), Boolean.valueOf( bean.isBool() ) );
assertEquals( jsonObject.get( "integer" ), new Integer( bean.getInteger() ) );
assertEquals( jsonObject.get( "string" ), bean.getString() );
3.2.3 Caution
There are two special cases when converting to an specific bean, if the target bean has a Map property and it must contain other beans, JSONObject.toBean() will transform the nested(嵌套) beans into DynaBeans. If you need those nested beans transformed into an specific class, you can either postprocess the Map attribute or provide hints(提示) on JSONObject's attributes for conversion. JSONObject.toBean() may be passed a third argument, a Map, that will provide thos hints. Every key must be either the name of a property or a regular expression matching the object's properties, and the value must be a Class.
The second case is similar and it happens when the target bean has a Collection (List) as a property and it must contain other beans. In this case there is no way to provide hints for class conversion. The only possible solution is to postprocess the collection transforming each DynaBean into an specific bean.
To ease the postprocessing scenarios(剧本), EZMorph provides a Morpher capable(能干的) of transforming a DynaBean into an specific bean, BeanMorpher
Example:
class MyBean{
private List data;
// getters & setters
}
class Person{
private String name;
// getters & setters
}
...
String json = "{'data':[{'name':'Wallace'},{'name':'Grommit'}]}";
Map classMap = new HashMap();
classMap.put( "data", Person.class );
MyBean bean = JSONObject.toBean( JSONObject.fromObject(json), MyBean.class, classMap );
This yields a MyBean instance that has DynaBeans inside the 'data' attribute', so now comes the part of postprocessing, this can be done with an Iterator
Example:
Morpher dynaMorpher = new BeanMorpher( Person.class, JSONUtils.getMorpherRegistry() );
morpherRegistry.registerMorpher( dynaMorpher );
List output = new ArrayList();
for( Iterator i = bean.getData().iterator(); i.hasNext(); ){
output.add( morpherRegistry.morph( Person.class, i.next() ) );
}
bean.setData( output );
4 Working with XML
Working with XML has become easier since version 1.1. Transforming JSONObjects and JSONArrays from and to XML is done through the XMLSerializer.
4.1 From JSON to XML
Writing to JSON to XML is as simple as calling XMLSerializer.write(), but there are a lot of options that you may configure to get better control of the XML output. For example you may change the default names for the root element ('o' if object, 'a' if array), the default name for object (an object inside an array is "anonymous"), the default name for array (for the same reason as object), the default name for element (array items have no name). If you'd like to output namescape information but your JSON does not includes it, no problem, you have 8 methods that will let you register and manage namespaces; namespaces defined this way have precedence on any namespace declaration that may be inside the JSON. By default XMLSerializer will append special attributes to each xml element for easing the transformation back to JSON but you may configure it to skip appending those attributes. Any property on a JSONObject that begins with '@' will be treated as an attribute, any property named '#text' will be treated as a Text node.
Please review the javadoc for XMLSerializer to know more about the configurable options.
4.2 From XML to JSON
XMLSerializer treats(处理) each element as a string unless a type parameter is specified.
JSONFunction needs an additional parameter that specifies that function's params.
All xml attributes will have the prefix '@' and text nodes will have the property name '#text'. XMLSerializer supports the rules outlined at Converting Between XML and JSON
4.3 CAUTION
when parsing, JSONObject and JSONArray will check for cycles in the hierarchy, throwing an exception if one is found. You can change this behavior by registering a CycleDetectionStrategy.
发表评论
-
一些java知识点
2012-08-30 14:19 702一些java知识点 1.可变参数类型(varargus) ... -
JUnit4入门学习
2012-08-26 17:03 1022JUnit4入门学习 1 继承TestCase类的简单 ... -
java开发过程中遇到的一些jar包的作用
2012-08-22 22:49 4993java开发过程中遇到的一些jar包的作用 参考:http: ... -
java中的Map
2012-08-08 15:45 492java中的Map public stati ... -
Java中的java.lang.Class
2012-07-24 22:53 825Java中的java.lang.Class 原 ... -
Java中的泛型
2012-07-26 09:15 697Java中的泛型 泛型 ... -
java中的属性和字段的区别
2012-07-20 09:07 3701java中的属性和字段的区别 参考:http://zh ... -
DWR
2011-06-02 14:39 643DWR 复习材料在附件 -
java编程中遇到的一些小技巧
2011-04-28 09:48 845java编程中遇到的一些小技巧 一、利用javaBean封装 ... -
gvim环境准备
2011-03-26 20:28 1324gvim环境准备 学习材 ... -
简单学生管理系统中用到的一些知识点
2011-01-06 16:08 1374一、表格的创建 /** * 表格中的数据 */ ... -
GridBagLayoutAPI例子测试
2010-11-21 21:35 835package lab9; import java ... -
apche org.common.lang.arrayutils类的ut测试
2010-11-14 18:17 1711apche commons包是对jdk包的扩展,提供了功能更加 ...
相关推荐
JSon-lib2.4入门学习文档,包括从官网上的get start和对应的例子
NULL 博文链接:https://snowelf.iteye.com/blog/689788
NULL 博文链接:https://zhkac.iteye.com/blog/505227
JSON从入门到精通,JSON与action的结合,json-lib等
NULL 博文链接:https://huibin.iteye.com/blog/583233
杰森搜索JsonSearch按路径搜索json入门先决条件正在安装作者谢伊·泰斯勒(Shay Tessler)执照麻省理工学院
用于通过npm分发的React组件库的入门模板。 技术领域 React Webpack 巴别塔 样式化的组件 笑话 酵素 如何使用此存储库作为模板 克隆此仓库的主分支: $ git clone --single-branch ...
script src =" https://cdn.privex.io/lib/simple-jsonrpc/master/simple-jsonrpc-js.min.js " > </ script > < script > // Create a Simple-JsonRPC object which can call ...
微信开发入门教程 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等。
在该库的composer.json中可以找到系统要求和依赖性。 有关更多详细信息,请参。 该库取决于 。 如果您尚未在计算机上安装它,请遵循或。 在本指南的其余部分中,我们假设您使用的是Linux / Unix / OS X,并且已安装...
使用您的项目详细信息更新package.json 更新README.md和CHANGELOG.md 生成项目: yarn build生成或npm run build 验证输出束的尺寸与yarn size或npm run size yarn lint项目: yarn lint或npm run lint 运行单元...
iso-lib-starter 使用汇总创建可重用的,现代的,同构的javascript库的入门程序。 要求 用法 生成新的存储库 打开终端, clone并cd到新的存储库中 在终端中时,复制,粘贴并在以下脚本中运行以设置公用文件 ( # ...
TypeScript库启动器 适用于现代TypeScript库的入门工具包。 生成准备在npm上发布JavaScript。 包括电池。 时期。 和用于格式化和整理用于测试执行进行测试和代码覆盖用于测试报告工作流程的配置文件克隆仓库$ git ...
模板用户指南 恭喜! :party_popper:你发现我了! :star-struck:希望此模板将为您节省一些时间,以进行基本而简单的设置来开始构建您的下...在发布到NPM之前,请不要忘记修改package.json , LICENSE和正在读取的文件。
入门 安装 您可以全局或本地安装lib-tools cli。 npm install -D lib-tools 或全局安装 npm install -g lib-tools 最新的npm软件包是 建立/捆绑项目 使用workflow.json配置文件构建/捆绑项目 lib build 或者,...
入门 烟雾测试 克隆存储库后,您将需要一个可用的 Ruby 环境。 我们建议使用 和 。 安装这些软件包后,您应该安装此库所需的 Ruby 版本(当前: 2.4.2 )和 bundler gem: $ rbenv install 2.4.2 $ gem install ...