JsonLib 简单入门

来源:互联网 发布:手机短信软件 编辑:程序博客网 时间:2024/05/17 09:33

什么是JSON

JSON(JvaScript Object Notation)官网网站是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。

JSON 的两种结构

键值对的集合

不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以将它理解成 HashMap。

示意图:
示意图

格式:{string1:value1, string2:value2, …}
示例:var json = {“name”:”Jack”, “age”: 34};

值的有序列表

在大部分语言中,它被理解为数组(Array 或 List)。

示意图:
示意图

格式:[value1, value2, …]
示例:var json = [“Jack”, 89 , false, 23.5];

JSON-lib

JSON-lib包是一个Java类库,提供将Java对象(包括:beans,maps,collections,java arrays 和 XML等)和JSON互相转换的功能。

相关的jar包:json-lib-2.3-jdk15.jarcommons-beanutils-1.8.0.jarcommons-collections-3.1.jarcommons-lang-2.4.jarcommons-logging-1.1.1.jarezmorph-1.0.6.jar

Maven依赖

// json-lib依赖<dependency>    <groupId>net.sf.json-lib</groupId>    <artifactId>json-lib</artifactId>    <version>2.4</version>    <classifier>jdk15</classifier></dependency>// xom依赖(xml->json需添加)<dependency>    <groupId>xom</groupId>    <artifactId>xom</artifactId>    <version>1.2.5</version></dependency>

JSON-lib简单使用

/* * 普通类型、数组、集合等都是用JSONArray解析 Map、自定义类型是用JSONObject解析 */// 格式:[v1, v2, ...]JSONArray jsonArray = null;// 格式:{k1:v1, k2:v2, ...}JSONObject jsonObject = null;// 序列化arrayObject[] array = { "Jack", "Tom", 33, 29.8 };jsonArray = JSONArray.fromObject(array);logger.info("array --> jsonArray : " + jsonArray);// 序列化listList<String> list = new ArrayList<String>();list.add("hello");list.add("json-lib");jsonArray = JSONArray.fromObject(list);logger.info("list  --> jsonArray : " + jsonArray);// 序列化setSet<Object> set = new HashSet<Object>();set.add("hello");set.add(true);jsonArray = JSONArray.fromObject(set);logger.info("set   --> jsonArray : " + jsonArray);// 序列化mapMap<String, Object> map = new HashMap<String, Object>();map.put("int", new Integer(24));map.put("student", new Student("Jack", 23));map.put("func", "function(i){ return this.arr[i]; }");jsonArray = JSONArray.fromObject(map);logger.info("map   --> jsonArray : " + jsonArray);// 过滤age字段JsonConfig config = new JsonConfig();config.setExcludes(new String[] { "age" });map = new HashMap<String, Object>();map.put("S001", new Student("Jack", 23));map.put("S002", new Student("Tom", 24));jsonObject = JSONObject.fromObject(map, config);logger.info("map   --> jsonObject : " + jsonObject);// 反序列化arrayjsonArray = JSONArray.fromObject("[89, 90, 'Jack']");Object object = JSONArray.toArray(jsonArray);logger.info("jsonArray  --> array : " + Arrays.asList((Object[]) object));// 反序列化mapString str = "{\"name\":\"Tom\", \"age\":90}";jsonObject = JSONObject.fromObject(str);map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);logger.info("jsonObject --> map : " + map);// 反序列化bean, bean类中必须有无参构造方法Student stu = (Student) JSONObject.toBean(jsonObject, Student.class);logger.info("jsonObject --> bean : " + stu);/* * 只获取内层嵌套数组或对象 *  * 通过getJSONArray(key) 可以取到一个JSONArray;  * 通过getJSONObject(key)可以取到一个JSONObject,--> 转换成map */str = "{\"person\": {\"name\": \"Emmo\", \"age\": 18}}";jsonObject = JSONObject.fromObject(str);jsonObject = jsonObject.getJSONObject("person");map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);logger.info("jsonObject(inner) --> map : " + map);// 序列化xmlString string = "<student><name id='001'>Emmo</name>    <sex>男</sex><age>20</age></student>";XMLSerializer xmlSerializer = new XMLSerializer();JSON json = xmlSerializer.read(string);logger.info("xml --> jsonObject : " + json.toString());

参考链接: 官网 & Maven依赖 & 下载地址

0 0
原创粉丝点击