JSON介绍和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41324009/article/details/90017803

一.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接口的方法进行赋值,取值以及删值等等操作。

猜你喜欢

转载自blog.csdn.net/qq_41324009/article/details/90017803