default 习惯 pos ring println targe 包含 rgs
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 成为理想的数据交换语言。
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 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
Json-lib 需要的 jar 包
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 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);
- }
- }
运行结果如下:
- ["Jack","Tom","90","true"]
- ["北京","上海",89,true,90.87]
- ["Jack","Rose"]
- [99,true,"Hello"]
2. 将 JavaBean/Map 解析成 JSON 串。 使用 JSONObject 解析:
- packagecn.sunzn.json;importjava.util.HashMap;importjava.util.Map;importnet.sf.json.JSONObject;publicclassJsonLib {
- @SuppressWarnings("static-access")publicstaticvoidmain(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);
- }
- }
运行结果如下:
- {
- "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:
- packagecn.sunzn.json;importjava.util.Arrays;importnet.sf.json.JSONArray;publicclassJsonLib {publicstaticvoidmain(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:
- packagecn.sunzn.json;importjava.util.Map;importnet.sf.json.JSONObject;publicclassJsonLib {
- @SuppressWarnings("unchecked")publicstaticvoidmain(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);
- }
- }
运行结果如下:
- {
- 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.()
- 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
java 后台对 json 格式数据的解析
来源: http://www.bubuko.com/infodetail-2029546.html