zoukankan      html  css  js  c++  java
  • JSON 在JavaScript 中的应用及自己的理解

    【对象和json】
    JSON:JavaScript 对象表示法(JavaScript Object Notation)。
    JSON 是存储和交换文本信息的语法。类似 XML。
    JSON是一种数据格式,不是一种编程语言。在json中没有注释。json代表了一个数据传输格式。
    一、json的语法可以表示以下三种类型的值:(数据结构)
    (1)简单值:是最简单的数据形式,可以是字符串、数值、布尔值、null。json不支持javascript中的特殊值undefined。注意:json中的字符串必须使用双引号括起来。
    (2)对象:json中的对象与javascript字面量稍微有一些不同,但是,json中的对象要求给属性加引号(双引号),其次没有末尾的分号(因为他不是javascript语句),它是使用花括号{}包含的键值对结构。

    例如:

    //在javascript中的对象字面量可以是:
             var object = {
                   name: "bob",
                   age: 29
                  };
             //而在json中表示上述对象的方式如下:
                  {
                      "name": "bob",
                      "age": 39
                  }

    (3)数组:数组是json的第二种复杂数据类型。即用“[]”起始来表示,用逗号来分隔元素。json数组也没有变量和分号。把数组和对象组合起来可以构成更复杂的数据集合。

    二、json的解析与序列化
    json可以把json数据结构解析为有用的javascript对象。是web开发中数据交换的事实标准。

    (1)json对象:json是javascript语法的子集,因此eval()函数可以解析、解释并返回javascript对象和数组,但是存在风险。
    json对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别把javascript对象序列化为json字符串,把json字符串解析为原生javascript值。
    (2)序列化选项
    JSON.stringify()除了要序列化的javascript外,还可以接受另外两个参数,用于指定用不同方式序列化javascript对象。第一个参数是一个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保持缩进。
    1、过滤结果:如果过滤器参数是数组,那么JSON.stringify()的结果中将只包含数组中列出的属性。

    var book = {
                  "title": "javascript",
                  "author": [
                           "bob"
                  ],
                  edition: 3,
                year:2001
              };
    
              var jsontext = JSON.stringify(book, ["title", "edition"]);
              //保存在json中的字符串为:title,edition和他们的属性值。

    如果第二个参数是函数,传入的函数接受两个参数,属性名和属性值。如果函数返回了undefined,那么相应的属性会被忽略。(通过返回undefined可以删除一个属性)。

     var book = {
                  "title": "javascript",
                  "author": [
                           "bob"
                  ],
                  edition: 3,
                year:2001
              };
    
              var jsontext = JSON.stringify(book, function(key, value){
                  switch(key){
                      case "author":
                        return value:join(",")
                      case "year":
                        return 3000;
                    case "edition" :
                      return undefined;
    
                    default:
                      return value;
                  }
              });
              //返回值就为title、author、year及属性值。


    2、字符串缩进
    json的第三个参数用于控制结果中的缩进和空白符,缩进字符可以是短画线之类的任意字符。缩进字符最长不超过10个字符。
    3、toJSON()方法:满足自定义序列化的需求。在这种情况下可以给对象定义toJSON()方法,返回自身的json数据格式。

    var book = {
                  "title": "javascript",
                  "author": [
                           "bob"
                  ],
                  edition: 3,
                            year:2001,
                            toJSON: function(){
                                    return this.title;
                           }
              };
                    var jsontext = JSON.stringify(book);

    假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:
    ——如果存在toJSON()方法而且能通过他取得有效的值,则调用该方法,否则,返沪对象本身。
    ——如果提供了第二个参数,应用这个函数过滤器。传入函数的过滤器的值是第一步返回的值。
    ——对第二步返回的值进行相应的序列化。
    ——如果提供了第三个参数,执行相应的格式。

    三、解析选项
    JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每一个键值对儿上调用。这个函数被称为还原函数。该函数接收两个参数,一个键和一个值,返回一个值。如果还原函数返回undefined,则表示从结果中删除相应的键;返回其他值,则将该值插入到结果中。

  • 相关阅读:
    leetcode-654-最大二叉树
    leetcode-46-全排列
    图片懒加载?
    HTTP常见的状态码?
    线程与进程的区别?
    网页从输入网址到渲染完成经历了哪些过程?
    网页前端性能优化的方式有哪些?
    常见的浏览器内核有哪些?
    汇编语言--cpu的工作原理(寄存器)--手稿
    对于 vue3.0 特性你有什么了解的吗?
  • 原文地址:https://www.cnblogs.com/yehui-mmd/p/5859315.html
Copyright © 2011-2022 走看看