Json 和 Jsonlib 的使用
- 什么是 Json
JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。
- JSON 的两种结构
1.“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以将它理解成 HashMap。
对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。
示例:var json = {"name":"Jack","age":90,"Marray":true};
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(Array 或 List)。
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];
- Json-lib
Json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
- 转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
- 转换 json 格式数据成为 javabeans 对象
Json-lib 需要的 jar 包
- commons-beanutils-1.8.3.jar
- commons-collections-3.2.1.jar
- commons-lang-2.6.jar
- commons-logging-1.1.1.jar
- ezmorph-1.0.6.jar
- json-lib-2.4-jdk15.jar
- Json-lib 的使用
1. 将 Array 解析成 Json 串。使用 JSONArray 可以解析 Array 类型:

- package cn.sunzn.json;
- import java.util.ArrayList;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- import net.sf.json.JSONArray;
- public class JsonLib {
- public static void main(String[] args) {
- /**
- * 将 Array 解析成 Json 串
- */
- String[] str = { "Jack", "Tom", "90", "true" };
- JSONArray json = JSONArray.fromObject(str);
- System.err.println(json);
- /**
- * 对像数组,注意数字和布而值
- */
- Object[] o = { "北京", "上海", 89, true, 90.87 };
- json = JSONArray.fromObject(o);
- System.err.println(json);
- /**
- * 使用集合类
- */
- List<String> list = new ArrayList<String>();
- list.add("Jack");
- list.add("Rose");
- json = JSONArray.fromObject(list);
- System.err.println(json);
- /**
- * 使用 set 集
- */
- Set<Object> set = new HashSet<Object>();
- set.add("Hello");
- set.add(true);
- set.add(99);
- json = JSONArray.fromObject(set);
- System.err.println(json);
- }
- }

运行结果如下:
- ["Jack","Tom","90","true"]
- ["北京","上海",89,true,90.87]
- ["Jack","Rose"]
- [99,true,"Hello"]
2. 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:

- package cn.sunzn.json;
- import java.util.HashMap;
- import java.util.Map;
- import net.sf.json.JSONObject;
- public class JsonLib {
- @SuppressWarnings("static-access")
- public static void main(String[] args) {
- /**
- * 解析 HashMap
- */
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("name", "Tom");
- map.put("age", 33);
- JSONObject jsonObject = JSONObject.fromObject(map);
- System.out.println(jsonObject);
- /**
- * 解析 JavaBean
- */
- Person person = new Person("A001", "Jack");
- jsonObject = jsonObject.fromObject(person);
- System.out.println(jsonObject);
- /**
- * 解析嵌套的对象
- */
- map.put("person", person);
- jsonObject = jsonObject.fromObject(map);
- System.out.println(jsonObject);
- }
- }

运行结果如下:
- {"age":33,"name":"Tom"}
- {"id":"A001","name":"Jack"}
- {"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}
3. 使用 JsonConfig 过虑属性:适用于 JavaBean/Map

- package cn.sunzn.json;
- import net.sf.json.JSONObject;
- import net.sf.json.JsonConfig;
- public class JsonLib {
- public static void main(String[] args) {
- JsonConfig config = new JsonConfig();
- config.setExcludes(new String[] { "name" }); // 指定在转换时不包含哪些属性
- Person person = new Person("A001", "Jack");
- JSONObject jsonObject = JSONObject.fromObject(person, config); // 在转换时传入之前的配置对象
- System.out.println(jsonObject);
- }
- }

运行结果如下,在运行结果中我们可以看到 name 属性被过滤掉了:
- {"id":"A001"}
4. 将 Json 串转换成 Array:

- package cn.sunzn.json;
- import java.util.Arrays;
- import net.sf.json.JSONArray;
- public class JsonLib {
- public static void main(String[] args) {
- JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
- Object array = JSONArray.toArray(jsonArray);
- System.out.println(array);
- System.out.println(Arrays.asList((Object[]) array));
- }
- }

运行结果如下:
- [Ljava.lang.Object;@1e5003f6
- [89, 90, 99]
5. 将 Json 串转成 JavaBean/Map:

- package cn.sunzn.json;
- import java.util.Map;
- import net.sf.json.JSONObject;
- public class JsonLib {
- @SuppressWarnings("unchecked")
- public static void main(String[] args) {
- /**
- * 将 Json 形式的字符串转换为 Map
- */
- String str = "{\"name\":\"Tom\",\"age\":90}";
- JSONObject jsonObject = JSONObject.fromObject(str);
- Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
- System.out.println(map);
- /**
- * 将 Json 形式的字符串转换为 JavaBean
- */
- str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
- jsonObject = JSONObject.fromObject(str);
- System.out.println(jsonObject);
- Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
- System.out.println(person);
- }
- }

运行结果如下:
- {age=90, name=Tom}
- Person [id=A001, name=Jack]
在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误:

- Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
- at net.sf.json.JSONObject.toBean(JSONObject.java:288)
- at net.sf.json.JSONObject.toBean(JSONObject.java:233)
- at cn.sunzn.json.JsonLib.main(JsonLib.java:23)
- Caused by: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
- at java.lang.Class.getConstructor0(Unknown Source)
- at java.lang.Class.getDeclaredConstructor(Unknown Source)
- at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)
- at net.sf.json.JSONObject.toBean(JSONObject.java:282)
- ... 2 more

Json 和 Jsonlib 的使用的更多相关文章
- org.json和json-lib比较
经常会用到JSON格式才处理,尤其是在Http请求的时候,网上可以找到很多json处理的相关工具,如org.json和json-lib,下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序. ...
- org.json与json-lib的区别(补充 FastJson)
org.json 是JSON国际组织官方推出的标准json解析方案,已经被 android sdk 纳入到标准内置类库,依赖项少,但直至API17版本SDK中,仅支持JSONObject与JSONAr ...
- Java中使用org.json和json-lib解析JSON
文章目录 [隐藏] 一.JavaProject中org.json解析JSON 1.JSON的org.son-api下载 1)JSON网址 2)JSON的java解析org.json-api网址 3) ...
- Java构造和解析Json数据的两种方法详解一——json-lib
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...
- Java构造和解析Json数据的两种方法详解二
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...
- JSON:org.json的基本用法
java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...
- org.json 使用
org.json 和 json-lib 使用上差不多. //JSONObject public static void main(String[] args) { String jsonObjectS ...
- JSON入门之二:org.json的基本用法
java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...
- JSON入门之二:org.json的基本使用方法
java中用于解释json的主流工具有org.json.json-lib与gson.本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...
随机推荐
- Android下so注入和hook
一.前言 总结一下这两天学习的Android注入so文件,通过遍历got表hook函数调用 1.注入so文件 2.so文件中遍历got表hook函数 二.注入so文件 1)注入进程 1.编程思路分为以 ...
- spring-boot配置log4j日志
spring boot默认使用logback日志记录工具,修改为log4j: <dependency> <groupId>org.springframework.boot< ...
- Java生成验证码(二)
前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ———————————————————————————————————————————— ...
- 【Hadoop系列】linux SSH原理解析
本文中斜体加粗代表shell指令,操作环境 CentOS6.5 linux root免密码登录链接:[Hadoop系列]linux下 root用户免密码登录远程主机 ssh. linux 非root用 ...
- Java基础(七)常用类
一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...
- servlet开发(四)之ServletContext
接上一篇. 2.3.4 利用ServletContext对象读取资源文件 比如我们要读取web项目中的配置文件. 项目目录结构如下: 使用ServletContext对象读取资源文件的示例代码如下: ...
- java.lang.UnsupportedClassVersionError: action/Login : Unsupported major.minor version 52.0 (unable to load class action.Login)异常
用myeclipse新建一个web项目,用了struts2框架,tomcat启动的时候报了这个错误. 我的问题原因是tomcat7的运行环境不知道为什么设置成了myeclipse1.7的jre,我给它 ...
- MySql5.5以上版本设置主从结构的例子
为了实现读写分离,一般都需要先设置好mysql的主从结构,网上现有的mysql配置大都基于低版本,在5.5以上版本无法配置成功,所以参考了官方文档,写了这篇笔记. *主要参考Mysql 5.6的官方文 ...
- rocketmq 两个线程同时消费一个消息
1.问题描述 线上项目A部署两台机器,每台机器两个实例,订阅同一个topic,消费心跳数据. (两台机器host1,host2) 运维同事 部署时 有一个实例用root账户重启的, 然后该实例出现两个 ...
- 软件项目技术点(5)——在canvas上绘制动态网格线
AxeSlide软件项目梳理 canvas绘图系列知识点整理 grid类的实现 当鼠标在画布上缩放时,网格能跟着我的鼠标滚动而相应的有放大缩小的效果. 下面是具体实现的代码,draw函数里计算出大 ...