java的json格式_java后台对json格式数据的解析

什么是 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};

e1a2e230f56c7f476fff3608a321a242.gif

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(Array 或 List)。

数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。

示例:var json = ["Jack","Rose","Tom",89,true,false];

c01eb714ee9b0f98216bbca371ff9111.gif

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 类型:

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecn.sunzn.json;

importjava.util.ArrayList;

importjava.util.HashSet;

importjava.util.List;

importjava.util.Set;

importnet.sf.json.JSONArray;

public classJsonLib {

public static voidmain(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 list = new ArrayList();

list.add("Jack");

list.add("Rose");

json =JSONArray.fromObject(list);

System.err.println(json);

/*** 使用 set 集

*/Set set = new HashSet();

set.add("Hello");

set.add(true);

set.add(99);

json =JSONArray.fromObject(set);

System.err.println(json);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果如下:

["Jack","Tom","90","true"]

["北京","上海",89,true,90.87]

["Jack","Rose"]

[99,true,"Hello"]

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecn.sunzn.json;

importjava.util.HashMap;

importjava.util.Map;

importnet.sf.json.JSONObject;

public classJsonLib {

@SuppressWarnings("static-access")

public static voidmain(String[] args) {

/*** 解析 HashMap

*/Map map = new HashMap();

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);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果如下:

{"age":33,"name":"Tom"}

{"id":"A001","name":"Jack"}

{"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecn.sunzn.json;

importnet.sf.json.JSONObject;

importnet.sf.json.JsonConfig;

public classJsonLib {

public static voidmain(String[] args) {

JsonConfig config = newJsonConfig();

config.setExcludes(new String[] { "name" }); //指定在转换时不包含哪些属性

Person person = new Person("A001", "Jack");

JSONObject jsonObject = JSONObject.fromObject(person, config); //在转换时传入之前的配置对象

System.out.println(jsonObject);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

{"id":"A001"}

4. 将 Json 串转换成 Array:

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecn.sunzn.json;

importjava.util.Arrays;

importnet.sf.json.JSONArray;

public classJsonLib {

public static voidmain(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));

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果如下:

[Ljava.lang.Object;@1e5003f6

[89, 90, 99]

5. 将 Json 串转成 JavaBean/Map:

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecn.sunzn.json;

importjava.util.Map;

importnet.sf.json.JSONObject;

public classJsonLib {

@SuppressWarnings("unchecked")

public static voidmain(String[] args) {

/*** 将 Json 形式的字符串转换为 Map

*/String str = "{\"name\":\"Tom\",\"age\":90}";

JSONObject jsonObject =JSONObject.fromObject(str);

Map map = (Map) 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);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果如下:

{age=90, name=Tom}

Person [id=A001, name=Jack]

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.()

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.()

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值