• 什么是 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 类型:

  1. package cn.sunzn.json;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7.  
  8. import net.sf.json.JSONArray;
  9.  
  10. public class JsonLib {
  11. public static void main(String[] args) {
  12. /**
  13. * 将 Array 解析成 Json 串
  14. */
  15. String[] str = { "Jack", "Tom", "90", "true" };
  16. JSONArray json = JSONArray.fromObject(str);
  17. System.err.println(json);
  18.  
  19. /**
  20. * 对像数组,注意数字和布而值
  21. */
  22. Object[] o = { "北京", "上海", 89, true, 90.87 };
  23. json = JSONArray.fromObject(o);
  24. System.err.println(json);
  25.  
  26. /**
  27. * 使用集合类
  28. */
  29. List<String> list = new ArrayList<String>();
  30. list.add("Jack");
  31. list.add("Rose");
  32. json = JSONArray.fromObject(list);
  33. System.err.println(json);
  34.  
  35. /**
  36. * 使用 set 集
  37. */
  38. Set<Object> set = new HashSet<Object>();
  39. set.add("Hello");
  40. set.add(true);
  41. set.add(99);
  42. json = JSONArray.fromObject(set);
  43. System.err.println(json);
  44. }
  45. }

运行结果如下:

  1. ["Jack","Tom","90","true"]
  2. ["北京","上海",89,true,90.87]
  3. ["Jack","Rose"]
  4. [99,true,"Hello"]

2. 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析:

  1. package cn.sunzn.json;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import net.sf.json.JSONObject;
  7.  
  8. public class JsonLib {
  9. @SuppressWarnings("static-access")
  10. public static void main(String[] args) {
  11. /**
  12. * 解析 HashMap
  13. */
  14. Map<String, Object> map = new HashMap<String, Object>();
  15. map.put("name", "Tom");
  16. map.put("age", 33);
  17. JSONObject jsonObject = JSONObject.fromObject(map);
  18. System.out.println(jsonObject);
  19.  
  20. /**
  21. * 解析 JavaBean
  22. */
  23. Person person = new Person("A001", "Jack");
  24. jsonObject = jsonObject.fromObject(person);
  25. System.out.println(jsonObject);
  26.  
  27. /**
  28. * 解析嵌套的对象
  29. */
  30. map.put("person", person);
  31. jsonObject = jsonObject.fromObject(map);
  32. System.out.println(jsonObject);
  33. }
  34. }

运行结果如下:

  1. {"age":33,"name":"Tom"}
  2. {"id":"A001","name":"Jack"}
  3. {"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}

3. 使用 JsonConfig 过虑属性:适用于 JavaBean/Map

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

运行结果如下,在运行结果中我们可以看到 name 属性被过滤掉了:

  1. {"id":"A001"}

4. 将 Json 串转换成 Array:

  1. package cn.sunzn.json;
  2.  
  3. import java.util.Arrays;
  4. import net.sf.json.JSONArray;
  5.  
  6. public class JsonLib {
  7. public static void main(String[] args) {
  8. JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
  9. Object array = JSONArray.toArray(jsonArray);
  10. System.out.println(array);
  11. System.out.println(Arrays.asList((Object[]) array));
  12. }
  13. }

运行结果如下:

  1. [Ljava.lang.Object;@1e5003f6
  2. [89, 90, 99]

5. 将 Json 串转成 JavaBean/Map:

  1. package cn.sunzn.json;
  2.  
  3. import java.util.Map;
  4.  
  5. import net.sf.json.JSONObject;
  6.  
  7. public class JsonLib {
  8. @SuppressWarnings("unchecked")
  9. public static void main(String[] args) {
  10. /**
  11. * 将 Json 形式的字符串转换为 Map
  12. */
  13. String str = "{\"name\":\"Tom\",\"age\":90}";
  14. JSONObject jsonObject = JSONObject.fromObject(str);
  15. Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
  16. System.out.println(map);
  17.  
  18. /**
  19. * 将 Json 形式的字符串转换为 JavaBean
  20. */
  21. str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
  22. jsonObject = JSONObject.fromObject(str);
  23. System.out.println(jsonObject);
  24. Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
  25. System.out.println(person);
  26. }
  27. }

运行结果如下:

  1. {age=90, name=Tom}
  2. Person [id=A001, name=Jack]

在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误:

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

Json 和 Jsonlib 的使用的更多相关文章

  1. org.json和json-lib比较

    经常会用到JSON格式才处理,尤其是在Http请求的时候,网上可以找到很多json处理的相关工具,如org.json和json-lib,下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序. ...

  2. org.json与json-lib的区别(补充 FastJson)

    org.json 是JSON国际组织官方推出的标准json解析方案,已经被 android sdk 纳入到标准内置类库,依赖项少,但直至API17版本SDK中,仅支持JSONObject与JSONAr ...

  3. Java中使用org.json和json-lib解析JSON

    文章目录  [隐藏] 一.JavaProject中org.json解析JSON 1.JSON的org.son-api下载 1)JSON网址 2)JSON的java解析org.json-api网址 3) ...

  4. Java构造和解析Json数据的两种方法详解一——json-lib

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...

  5. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  6. JSON:org.json的基本用法

    java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

  7. org.json 使用

    org.json 和 json-lib 使用上差不多. //JSONObject public static void main(String[] args) { String jsonObjectS ...

  8. JSON入门之二:org.json的基本用法

    java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

  9. JSON入门之二:org.json的基本使用方法

    java中用于解释json的主流工具有org.json.json-lib与gson.本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

随机推荐

  1. Android下so注入和hook

    一.前言 总结一下这两天学习的Android注入so文件,通过遍历got表hook函数调用 1.注入so文件 2.so文件中遍历got表hook函数 二.注入so文件 1)注入进程 1.编程思路分为以 ...

  2. spring-boot配置log4j日志

    spring boot默认使用logback日志记录工具,修改为log4j: <dependency> <groupId>org.springframework.boot< ...

  3. Java生成验证码(二)

    前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ————————————————————————————————————————————   ...

  4. 【Hadoop系列】linux SSH原理解析

    本文中斜体加粗代表shell指令,操作环境 CentOS6.5 linux root免密码登录链接:[Hadoop系列]linux下 root用户免密码登录远程主机 ssh. linux 非root用 ...

  5. Java基础(七)常用类

    一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...

  6. servlet开发(四)之ServletContext

    接上一篇. 2.3.4 利用ServletContext对象读取资源文件 比如我们要读取web项目中的配置文件. 项目目录结构如下: 使用ServletContext对象读取资源文件的示例代码如下: ...

  7. 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,我给它 ...

  8. MySql5.5以上版本设置主从结构的例子

    为了实现读写分离,一般都需要先设置好mysql的主从结构,网上现有的mysql配置大都基于低版本,在5.5以上版本无法配置成功,所以参考了官方文档,写了这篇笔记. *主要参考Mysql 5.6的官方文 ...

  9. rocketmq 两个线程同时消费一个消息

    1.问题描述 线上项目A部署两台机器,每台机器两个实例,订阅同一个topic,消费心跳数据. (两台机器host1,host2) 运维同事 部署时 有一个实例用root账户重启的, 然后该实例出现两个 ...

  10. 软件项目技术点(5)——在canvas上绘制动态网格线

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 grid类的实现 当鼠标在画布上缩放时,网格能跟着我的鼠标滚动而相应的有放大缩小的效果. 下面是具体实现的代码,draw函数里计算出大 ...