zoukankan      html  css  js  c++  java
  • JSON初步认识

    一、背景

      曾经有一段时间,XML是互联网传输结构化数据的标准。但是XML过于繁琐、冗长。JSON2001年就开始应用了,2006年,DC才把Json提交给IETF.

      与XML相比,Json是在JavaScript中读写结构化数据的更好的方式。

      Json是一种数据格式,不是编程语言,不局限与JavaScript,很多语言都有针对Json的解析器和序列器。

      Json可以表示三种类型值:简单值、对象、数组。JavaScript字符串与Json字符串最大的区别在于Json字符串必须使用双引号(单引号会导致语法错误)

    二、语法

      1.简单值:Json字符串必须使用双引号(不然会导致语法错误),JavaScript的字符串可单可双

      2.对象:Javascript 与 Json稍有不同//Javascript:

    var person = {
      name: "Mike",
      age: 29
    };
    
    //Javascript也可以这样写: var person = {   "name": "Mike",   "age": 29 };

    // 注意,必须有分号结尾,因为这是javascript语句

    // Json的对象, 与javascript对象不同有2个地方,1.没有声明变量   2.末尾没有分号,因为它不是js语句
    {
      "name": "Mike",
      "age": 29
    }
    

     

      3.数组

    // 下面是javascript中的数组字面量
    var values = [25, "hi", true];
    // JSON数组也没有变量与分号 [25, "hi", true]

    三、核心优势

      Json之所以流行,是因为可以把JSON数据结构解析为有用的JavaScript对象,在解析为JavaScript对象后,取数据极其简单

    // 取得第三本书的书名
    books[2].title
    

      

    四、两个方法

      早期JSON解析器基本上是用javascript的eval函数,因为JSON是Javasciprt语法的子集,所以eval能解析、解释并返回javasciprt的对象、数组。但是ES5对此进行规范,定义了全局JSON对象,它有以下两种方法:

    // JSON.stringify()  把JavaScript对象序列化为JSON字符串
    var book = {title: '《十万个为什么》'}
    var jsonText = JSON.stringify(book)
    console.log(jsonText)
    // 输出字符串  {"title":"十万个为什么"} 
    // 该字符串不包含任何空格字符或缩进,值为undefined的任何属性会被跳过
    
    
    // JSON.parse()  把JSON字符串解析为原生JavaScript值
    var bookCopy = JSON.parse(jsonText)
    // 这里的bookCopy与book具有相同属性,但是彼此独立,没有任何关系

    五、两个方法的详细运用

      5.1 JSON.stringify(js对象, 参数一/参数二, 参数三)

    // 1) 参数一: 过滤器
    var book = {
        "title": "Professional JavaScript",
        "authors": ["My name is Psg"],
         year: 2017
    }
    var jsonText = JSON.stringify(book, ["title", "year"])
    console.log(jsonText)
    // 输出:{"title": "Professional JavaScript","year": 2017}
    
    // 2) 参数二: 函数(可传入两个参数:键-值)
    jsonText = JSON.stringify(book, function(key, value) {
        switch(key) {
            case "authors":
                return value.join(",")
            case "year":
                return 5000
            case "title":
                return undefined
            default:
                return value
        }
    })
    console.log(jsonText)
    // 输出:{"authors": ""My name is Psg","year": 5000}
    // 注意,如果js对象转json字符串,值为undefined,会自动删除该键值对
    
    // 3) 参数三: 字符串缩进
    var jsonText = JSON.stringify(book, null, 4)
    console.log(jsonText)
    // 在控制台输出:
    //{
    //    "title": "Professional JavaScript",
    //    "authors": ["My name is Psg"],
    //     year: 2017
    //}
    
    // 看到没有,自动换行加缩进4个字符
    

      5.1 JSON.parse(js对象, 参数二)

        为什么叫参数二,是因为它和stringify的参数二一样,是一个函数,该函数也可以传入两个参数(键-值),用法一样,就重复了。

  • 相关阅读:
    转: adroid音视延迟 10ms的原因与解答
    去应聘软件工程师记得这样介绍自己
    U盘中了磁碟机病毒怎么办
    Heartbeats
    视频格式研究
    开源镜像站汇总
    Linux各目录缩写含义
    虚拟中没有eth0
    使用#锚点时,jsp中不能有basePath
    android systemUI--Notification 整理
  • 原文地址:https://www.cnblogs.com/pengshengguang/p/7993373.html
Copyright © 2011-2022 走看看