json

  1. 什么是JSON
    概念:JSON 的英文全称是 JavaScript Object Notation(记号,标记),即“JavaScript 对象表示法”。简单来讲,JSON 就是 Javascript 对象和数组的字符串表示法,它使用文本表示一个 JS 对象或数组的信息,因此,JSON 的本质是字符串
    作用:JSON 是一种轻量级的文本数据交换格式,在作用上类似于 XML,专门用于存储和传输数据,但是 JSON 比 XML 更小、更快、更易解析。
    现状:JSON 是在 2001 年开始被推广和使用的数据格式,到现今为止,JSON 已经成为了主流的数据交换格式。
  2. JSON的两种结构
    JSON 就是表示 Javascript 对象或数组的字符串。所以,JSON 有对象和数组两种结构,通过这两种结构的相互嵌套,可以表示各种复杂的数据结构。
  • 对象结构:对象结构在 JSON 中表示为 { } 括起来的内容。数据结构为 { key: value, key: value, … } 的键值对结构。其中,key 必须是使用英文的双引号包裹的字符串,value 的数据类型可以是数字、字符串、布尔值、null、数组、对象6种类型value为字符串类型时也必须用英文双引号引起,总之,不管是键还是值,是字符串类型就必须用英文双引号引起
    错误示例
    image
    纠正后
{
"name": "zs",
"age": 20,//属性值如果是数字可以不加引号
"gender": "男",
"address": null,
"hobby": ["吃饭", "睡觉", "打豆豆"]
}
  • 数组结构:数组结构在 JSON 中表示为 [ ] 括起来的内容。数据结构为 [ "java", "javascript", 30, true … ] 。
    数组中数据的类型可以是数字、字符串、布尔值、null、数组、对象6种类型
[ "java", "python", "php" ]
[ 100, 200, 300.5 ]
[ true, false, null ]
[ { "name": "zs", "age": 20}, { "name": "ls", "age": 30} ]
[ [ "苹果", "榴莲", "椰子" ], [ 4, 50, 5 ] ]
  1. JSON语法注意事项
    属性名必须使用双引号包裹
    字符串类型的值必须使用双引号包裹
    JSON 中不允许使用单引号表示字符串
    JSON 中不能写注释
    JSON 的最外层必须是对象{}或数组[]格式
    不能使用 undefined 或函数作为 JSON 的值
    JSON 的作用:在计算机与网络上存储和传输数据。
    JSON 的本质:表示 Javascript 对象数据或数组数据的字符串

  2. JSON和JS对象的关系
    JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。例如:

//这是一个对象
var obj = {a: 'Hello', b: 'World'}
//这是一个 JSON 字符串,本质是一个字符串
var json = '{"a": "Hello", "b": "World"}'
  1. JSON和JS对象的互转
    要实现从 JSON 字符串转换为 JS 对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}')
//结果是 {a: 'Hello', b: 'World'}

要实现从 JS 对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'})
//结果是 '{"a": "Hello", "b": "World"}'
const xhr =new XMLHttpRequest()
xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks')
xhr.send()
xhr.onreadystatechange=function(){
    if(xhr.readyState===4){
        if(xhr.status>=200&&xhr.status<300){
            const json=xhr.responseText;
            console.log(json);
            console.log(typeof json);
            const obj=JSON.parse(json);
            console.log(obj);
            console.log(typeof obj);
            console.log(typeof JSON.stringify(obj));
        }
    }
}

image

  1. 序列化和反序列化
    把数据对象转换为字符串的过程,叫做序列化,例如:调用 JSON.stringify() 函数的操作,叫做 JSON 序列化。
    把字符串转换为数据对象的过程,叫做反序列化,例如:调用 JSON.parse() 函数的操作,叫做 JSON 反序列化。

基于JSON的数据交换

  • 在WEB前端中,如何将一个json格式的字符串转换成json对象

    var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}"
    var jsonObj = JSON.parse(jsonStr)
    console.log(jsonObj.username)
    console.log(jsonObj.password)
    
  • 在后端拼接JSON格式的字符串,响应给前端的浏览器

    json.append("[");
    while (rs.next()) {
        // 获取每个学生的信息
        String name = rs.getString("name");
        String age = rs.getString("age");
        String addr = rs.getString("addr");
        // 拼接json格式的字符串
        // {"name":"   王五    ","age":    20      ,"addr":"      北京大兴区     "},
        json.append("{\"name\":\"");
        json.append(name);
        json.append("\",\"age\":");
        json.append(age);
        json.append(",\"addr\":\"");
        json.append(addr);
        json.append("\"},");
    }
    jsonStr = json.substring(0, json.length() - 1) + "]";
    
  • 拼接JSON格式的字符串太痛苦,可以使用阿里巴巴的fastjson组件,它可以将java对象转换成json格式的字符串

    List<Student> studentList = new ArrayList<>();
    while (rs.next()) {
        // 取出数据
        String name = rs.getString("name");
        int age = rs.getInt("age");
        String addr = rs.getString("addr");
        // 将以上数据封装成Student对象
        Student s = new Student(name, age, addr);
        // 将Student对象放到List集合
        studentList.add(s);
    }
    // 将List集合转换成json字符串
    jsonStr = JSON.toJSONString(studentList);
    

    注意:使用fastjson需要引入fastjson-1.2.2.jar

posted @ 2023-03-20 08:21  Code6E  阅读(31)  评论(0编辑  收藏  举报