JavaScript的对象表示法:JSON

概念

  • JSON:JavaScript 对象表示法(JavaScript Object Notation)
  • JSON现在多用于存储和交换文本信息的语法,进行数据的传输。
  • JSON 比 XML 更小、更快,更易解析。
  • 注意:JSON 虽然使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。
{
    "employees": [
    { "firstName":"Bill" , "lastName":"Gates" },
    { "firstName":"George" , "lastName":"Bush" },
    { "firstName":"Thomas" , "lastName":"Carter" }
    ]
}

区别

类似 XML

  • JSON 是纯文本
  • JSON 具有“自我描述性”(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

相比 XML 的不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

总结

  • 对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

    • 使用 XML
      - 读取 XML 文档
      - 使用 XML DOM 来循环遍历文档
      - 读取值并存储在变量中
      • 使用 JSON
        • 读取 JSON 字符串

语法

  • JSON 语法是 JavaScript 语法的子集。

语法规则

  • JSON 语法是 JavaScript 对象表示法语法的子集。
  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

名称/值对

JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "John"

  1. 数字(整数或浮点数)
  2. 字符串(在双引号中)
  3. 逻辑值(true 或 false)
  4. 数组(在方括号中) {“persons”:[{},{}]}
  5. 对象(在花括号中) { “firstName”:“John” , “lastName”:“Doe” }
  6. null

文件

  • JSON 文件的文件类型是 “.json”
  • JSON 文本的 MIME 类型是 “application/json”

使用

获取数据

  1. json对象.键名
  2. json对象[“键名”]
  3. 数组对象[索引]
    /* 基本格式 */
    var person = {"name":"cat","age":11}
    var name11 = person.name;
    var name12 = person["name"];

   /* 嵌套格式 */
    //   JSON { JSON,JASON }
    var persons = {
        "personCat": {"name":"cat","age":11},
        "personDog":{"name":"dog","age":12},
        "personRat":{"name":"rat","age":13}}
    var personCat = persons.personCat;
    var name2 = persons.personCat.name;

    //   Array [JSON,JASON]
    var array = [
        {"name":"cat","age":11},
        {"name":"dog","age":12},
        {"name":"rat","age":13}]
    var name3 = array[0].name;

    //   JSON { Array[JSON,JASON], Array[JSON,JASON] }
    var persons = {
        "person1":[
            {"name":"cat","age":11},
            {"name":"dog","age":12},
            {"name":"rat","age":13},],
        "person2":[
            {"name":"cat","age":11},
            {"name":"dog","age":12},
            {"name":"rat","age":13},]
    }
    var name4 = persons.person1[0].name;

遍历

  /* 基本格式 */
    var person = {"name":"cat","age":11}
    for (var key in person) {
        // * key默认为字符串
        alert(key);
        alert(person.key); // * person."name"; 无法获取
        alert(person[key]); // * person["name"]; 无法获取
    }

    /* 嵌套格式 */
    var array = [
        {"name":"cat","age":11},
        {"name":"dog","age":12},
        {"name":"rat","age":13}]
    for (var i =0;i<array.length;i++) {
        var p = array[i];
        for (var key in p) {
            alert(key);
            alert(p[key]);
        }

    }

转换

  • 转换
    • 由于JSON对象的特性,在实际操作中,我们通过JSON对象代替Java对象在数据中的传输。所以,我们需要学习JSON对象和Java对象的相互转换。
  • JSON解析器
    • 常见的解析器:Jsonlib,Gson,fastjson,jackson

JSON转为Java对象

  • 导入jackson的相关jar包
  • 创建Jackson核心对象 ObjectMapper
  • 调用ObjectMapper的相关方法进行转换
    • readValue(json字符串数据,Class)

Java对象转换JSON

  • 导入jackson的相关jar包
  • 创建Jackson核心对象 ObjectMapper
  • 调用ObjectMapper的相关方法进行转换
    • writeValue(参数1,obj)
      - File:将obj对象转换为JSON字符串,并保存到指定的文件中。
      - Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中。
      - OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中。
    • writeValueAsString(obj)
      • 将对象转为json字符串

注解

  • @JsonIgnore:排除属性。
  • @JsonFormat:属性值得格式化
    • @JsonFormat(pattern = “yyyy-MM-dd”)

复杂java对象转换

  1. List:数组
  2. Map:对象格式一致

格式问题

  • 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。
    • 在浏览器端设置$.ajax属性
      • $.get(type):将最后一个参数type指定为"json"
    • 在服务器端设置MIME类型
      • response.setContentType(“application/json;charset=utf-8”);

你可能感兴趣的:(JavaWeb)