一.Java 中 JSON 的使用
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。
JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
JSON 具有自我描述性,更易理解
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库:
Gson: 谷歌开发的 JSON 库,功能十分全面。
FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。
Jackson: 社区十分活跃且更新速度很快。
二.IDEA环境配置
在 Maven 构建的项目中,在 pom.xml 文件中加入以下依赖即可。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
三.编码与解码
1.Json 使用规则:
用 eval() 处理 JSON 字符串
JSON 语法是 JavaScript 对象表示语法的子集。
数据在名称/值对中 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"name" : "菜鸟教程"
数据由逗号分隔 { "name":"菜鸟教程" , "url":"www.runoob.com" }
大括号保存对象 对象可以包含多个名称/值对:
中括号保存数组 数组可包含多个对象 数组元素可以通过索引来获取 sites[0].name="菜鸟教程";
{
"sites": [
{ "name":"菜鸟教程" , "url":"www.runoob.com" },
{ "name":"google" , "url":"www.google.com" },
{ "name":"微博" , "url":"www.weibo.com" }
]
}
SON 布尔值可以是 true 或者 false:{ "flag":true }
JSON 可以设置 null 值:
{ "runoob":null }
2.JsonObject的方法
Student student=new Student(1,1000d,"旅游",new Date());
//创建一个数组list
List<Student> list=new ArrayList<Student>();
数组添加数据
list.add(new Student(1,1000d,"旅游",new Date()));
创建JsonObject对象
JSONObject jsonObject=new JSONObject()
//jsonObject 添加元素
jsonObject.put("8", "签名");
jsonObject.put("stu", new Student(8,8000d,"购物",new Date()));
jsonObject.put("arr", list);
//1.判断该JSONObject对象是否为空
jsonObject.isEmpty();
//2.获取键值对的数量
jsonObject.size();
//3.根据键获取value;
jsonObject.get("1");
jsonObject.getString("8");
//4.是否包含指定的key
jsonObject.containsKey("1");
//5.是否包含指定的value
jsonObject.containsValue("签名");
//6.根据key获取对应的JSONObject对象
JSONObject stuJson=jsonObject.getJSONObject("stu");
stuJson.put("bz", "好学生");
//7.根据key获取对应的JSONObject数组
JSONArray arrJson=jsonObject.getJSONArray("arr");
//8.将数组转换为list
List<Student> javaList = jsonObject.getJSONArray("arr").toJavaList(Student.class);
//9.将JSONObject转为json字符串
String jsonString = jsonObject.toJSONString();
System.out.println(jsonString);
//10.public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler{}
//具有map的特点
Set<Entry<String, Object>> entrySet = jsonObject.entrySet();
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
while(iterator.hasNext()){
Entry<String, Object> next = iterator.next();
System.out.println(next.getKey()+":"+next.getValue());
}
Set<String> keySet = jsonObject.keySet();
Collection<Object> values = jsonObject.values();
//11.根据key移除键值对
jsonObject.remove("arr");
//12.清楚所有的元素
jsonObject.clear();
3.JSON 转换
#####Object转JSON字符串
String jsonStr = JSONObject.toJSONString(object);
#####JSON字符串转JSONObject:
//解析函数
JSONObject jsonObject = JSONObjcet.parseObject(jsonStr);
1
#####JSON字符串转Object对象
T t = JSON.parseObject(jsonStr,T.class);
1
#####将无泛型集合转为指定类型集合
String jsonString = JSONObject.toJSONString(list);
List<T> list = JSON.parseArray(jsonString,T.class);
注:JSON字符串是有格式要求的,必须为键值对形式,不是任意的字符串。-----
Json对象中添加的是键值对,JSONArray中添加的是Json对象
JSONObject Json = new JSONObject();
JSONArray JsonArray = new JSONArray();
Json.put("key", "value");//JSONObject对象中添加键值对
JsonArray.add(Json);//将JSONObject对象添加到Json数组中
4、JSONObject与Map JSONArray与List
Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。
Map<String,String> strmap=new JSONObject();
需要知道JSON类是个抽象类。
public abstract class JSON implements JSONStreamAware, JSONAware {
略..........可看源码
}
其次,JSONObject和JSONArray都继承了JSON类,并且JSONObject实现了map接口,而JSONArray实现了List接口。
public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
略...........可看源码
}
public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {
略...............可看源码
}
所以,JSONObject具有JSON类和Map接口的所有方法,而JSONArray具有JSON类和List接口的所有方法。
这时,我们就可以自己创建JSON对象,并通过map接口或者list接口的方法进行赋值,取值以及删值等等操作。