JSON

1 JSON解析

1.1 json概述

# 什么是json?
json(js对象标记)是一种轻量级的数据交换格式
# 作用
层次结构简洁且清晰,便于阅读和编写,有效地提升网络传输效率

 

1.2 json语法

- [] 表示数组
- {} 表示对象
- "" 表示属性名或字符串类型的值
- : 表示属性和值之间的间隔符
- , 表示多个属性的间隔符或多个元素的间隔符

 

1.3 json解析

1.3.1 FastJSON解析

# 什么是FastJSON
alibaba提供的jar包,现今在json处理上算是最快的jar包

json解析成对象或数组

 

  • 实体类

/**
* 成绩实体类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Grade {
?
   private Integer id;
   private String name;
   private List<Student> stus;
}
  • 测试类

/**
* json解析
*/
public class JsonParseTest {
?
   public static void main(String[] args) {
       // json解析成对象
       String json1 = "{‘id‘:1,‘name‘:‘JAVAEE-2021-01‘,‘stus‘:[{‘id‘:1,‘name‘:‘zhangsan‘,‘age‘:22}]}";
       Grade grade = JSON.parseObject(json1, Grade.class);
       System.out.println("成绩:" + grade);
?
       // json解析成数组
       String json2 = "[‘北京‘,‘上海‘,‘广州‘]";
       List<String> citys = JSON.parseArray(json2, String.class);
       System.out.println("城市:" + citys);
  }
}

 

对象或数组转换成json字符串

  • 测试类

/**
* 转换成json字符串
*/
public class ToJsonTest {
?
   public static void main(String[] args) {
       // 对象转换成json
       List<Student> list = new ArrayList<>();
       for(int i=0;i<3;i++){
           list.add(new Student(i, "张三", i+20));
      }
       Grade grade = new Grade(1, "JAVA-EE-2021-01", list);
       String json1 = JSON.toJSONString(grade);
       System.out.println("json1-->"+json1);
?
       // 数组转换成json
       String[] citys = new String[]{"北京","上海","广州"};
       String json2 = JSON.toJSONString(citys);
       System.out.println("json2-->" + json2);
  }
}

 

1.3.2 Jackson解析

# 什么是Jackson?
现今国际最流行的json处理库
# Jackson与fastJson对比
1 Jackson具备强大的兼容性,fastJson几乎没有,而且经常出现小bug
2 fastJson比较快
综上所述:推荐用Jackson,因为fastJson除了快其他方面几乎被Jackson完全干掉了

json解析成对象或数组

package com.qf.test;
?
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.entity.Grade;
?
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
?
/**
* json解析
*/
public class JsonParseTest {
?
   public static void main(String[] args) throws IOException {
       // json解析成对象,jackson不识别单引号,因此双引号需转义
       String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}";
       ObjectMapper mapper = new ObjectMapper();
       Grade grade = mapper.readValue(json1, Grade.class);
       System.out.println("成绩-->" + grade);
?
       // json解析成数组,先转换成集合,再转换成数组
       String json2 = "[\"北京\",\"天津\",\"杭州\"]";
       List<String> list = mapper.readValue(json2,new TypeReference<List<String>>(){});
       System.out.println("array-->"+ Arrays.toString(list.toArray()));
  }
}

 

对象或数组转换成json字符串

package com.qf.test;
?
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.entity.Grade;
import com.qf.entity.Student;
?
import java.util.ArrayList;
import java.util.List;
?
/**
* 转换成json字符串
*/
public class ToJsonTest {
?
   public static void main(String[] args) throws JsonProcessingException {
       ObjectMapper mapper = new ObjectMapper();
?
       // 对象转换成json
       List<Student> list = new ArrayList<>();
       for(int i=0;i<3;i++){
           list.add(new Student(i, "张三", i+20));
      }
       Grade grade = new Grade(1, "JAVA-EE-2021-01", list);
       String json1 = mapper.writeValueAsString(grade);
       System.out.println("json1-->"+json1);
?
       // 数组转换成json
       String[] citys = new String[]{"北京","上海","广州"};
       String json2 = mapper.writeValueAsString(citys);
       System.out.println("json2-->" + json2);
  }
}

 

1.3.3 浏览器json解析

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
<script type="text/javascript">
/* 对象转换成json字符串 */
let user = {
id: 1,
name: ‘zhangsan‘
}
let json = JSON.stringify(user);
alert(json);

/* json字符串转换成对象 */
alert(JSON.parse(json));
</script>
</body>
</html>

 

JSON

上一篇:考取阿里云的acp证书能够提升我们的职场竞争力


下一篇:【CSS】SASS用法