JSON 对象

JSON (JavaScript Object Notation 的缩写)

也是一种数据,是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify() 和  JSON.parse()

是一种无序的属性名和属性值的集合,用于网站的前后台交互。

  • 在前后台交互的时候,虽然数据的格式是 json,但要用字符串的形式进行传递
  • 发送时,使用 JSON.stringify( json对象 ) 将 json 对象转换成字符串。
  • 接收时,用 JSON.parse(字符串形式的 json ) 解析成 json 对象。
    var p = {
    name: '周杰伦',
    age: 40
    }; var jsonObj = {
    "name":"陶喆",
    "age":"45",
    "gender":"true"
    ,
    };

    // 发送
    var jsonStr = JSON.stringify(jsonObj); // // 接收
    var jsonObj = JSON.parse(jsonStr); // // for...in...遍历 json对象
    for var k in jsonObj{
    console
    }
  • JSON 格式是用于数据交换的文本格式
    • 2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。
    • JSON 迅速被接受,已经成为各大网站交换数据的标准格式,并被写入标准。
    • 目的是取代繁琐笨重的 XML 格式。
    • 两个显著的优点:
      • 书写简单,一目了然;
      • 符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。
  • 每个 JSON 对象就是一个值,可能是一个数组或对象,也可能是一个原始类型的值。总之,只能是一个值,不能是两个或更多的值。
  • JSON 对值的类型和格式有严格的规定

    • 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象
    • 原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)
    • 字符串必须使用双引号表示,不能使用单引号
    • 对象的键名必须放在双引号里面
    • 数组或对象最后一个成员的后面,不能加逗号
  • JSON.stringify()
    • 第一个参数为JSON对象,将转为 ' JSON 字符串' 。该字符串符合 JSON 格式,并且可以被 JSON.parse 方法还原
    • 第一个参数如果是原始类型的字符串,结果会带双引号,转换为 "JSON字符串"。
      • 这是因为将来还原的时候,内层双引号可以让 JavaScript 引擎知道,这是一个字符串,而不是其他类型的值

        JSON.stringify('foo') === "foo"     // false
        JSON.stringify('foo') === "\"foo\"" // true
        //字符串foo,被转成了"\"foo"\"。
        // 这是因为将来还原的时候,内层双引号可以让 JavaScript 引擎知道,这是一个字符串,而不是其他类型的值 JSON.stringify(false); // "false"
        // 由于没有内层双引号,所以原始值是布尔,而不是字符串 JSON.stringify('false'); // "\"false\""
    • 如果对象属性值是 undefined、函数或 XML 对象,该属性会 JSON.stringify 过滤
    • 如果数组成员undefined、函数或 XML 对象,则这些值被转成 null
    • 正则对象会被转成空对象    JSON.stringify(/foo/)        // "{}"
    • 会忽略对象的不可遍历的属性

      • var obj = {};
        Object.defineProperties(obj, {
        'foo': {
        value: 1,
        enumerable: true
        },
        'bar': {
        value: 2,
        enumerable: false
        }
        }); JSON.stringify(obj); // "{"foo":1}"
    • 还可以接受接受一个数组,作为第二个参数,指定需要转成字符串的属性。。。只对对象的属性有效,对数组无效
      • 指定要解析的属性

        • var obj = {
          'prop1': 'value1',
          'prop2': 'value2',
          'prop3': 'value3'
          }; var selectedProperties = ['prop1', 'prop2']; JSON.stringify(obj, selectedProperties); //{"prop1":"value1","prop2":"value2"}"
    • 第二个参数还可以是一个函数,用来更改 JSON.stringify 的返回值
    • 函数,接受两个参数,分别是被转换的对象的键名和键值
    • 递归处理所有的键。每次递归处理前一次修改后的对象
    • 如果处理函数返回undefined或没有返回值,则该属性会被忽略o
      • function f(key, value) {
        if (typeof value === "number") {
        value = 2 * value;
        }
        return value;
        } JSON.stringify({ a: 1, b: 2 }, f); // '{"a": 2,"b": 4}'
    • 还可以接受第三个参数,用于增加返回的 JSON 字符串的可读性。
      • 如果是数字,表示每个属性前面添加的空格(最多不超过10个)
      • 如果是字符串(不超过10个字符),则该字符串会添加在每行前面
        • JSON.stringify({ p1: 1, p2: 2 }, null, 2);
          /*
          "{
          "p1": 1,
          "p2": 2
          }"
          */ JSON.stringify({ p1:1, p2:2 }, null, '|-');
          /*
          "{
          |-"p1": 1,
          |-"p2": 2
          }"
          */
    • 第一个参数,即JSON对象,如果含有 toJSON() 方法,则直接使用这个方法的返回值作为参数,而忽略原对象的其他参数
    • Date 就拥有自己的 toJSON() 方法
    • toJSON方法的一个应用是,将正则对象自动转为字符串。JSON.stringify默认不能转换正则对象,但是设置了toJSON方法以后,就可以转换正则对象了
      var obj = {
      reg: /foo/
      }; // 不设置 toJSON 方法时
      JSON.stringify(obj) // "{"reg":{}}" // 设置 toJSON 方法时
      RegExp.prototype.toJSON = RegExp.prototype.toString;
      JSON.stringify(/foo/) // ""/foo/""
  • JSON.parse()
    • 用于将 JSON 字符串转换成对应的值
    • 如果传入的字符串不是有效的 JSON 格式,JSON.parse方法将报错
    • 为了处理解析错误,可以将JSON.parse方法放在try...catch代码块中
      • try {
        JSON.parse("'String'");
        } catch(e) {
        console.log('parsing error');
        }
    • 可以接受一个处理函数,作为第二个参数,用法与JSON.stringify方法类似
      • function f(key, value) {
        if (key === 'a') {
        return value + 10;
        }
        return value;
        } JSON.parse('{"a": 1, "b": 2}', f); // {a: 11, b: 2}

(77)Wangdao.com第十五天_JavaScript 用于数据交换的文本格式 JSON 对象的更多相关文章

  1. (78)Wangdao.com第十五天_JavaScript 面向对象

    面向对象编程(Object Oriented Programming,缩写为 OOP) 是目前主流的编程范式. 是单个实物的抽象, 是一个容器,封装了属性(property)和方法(method),属 ...

  2. (79)Wangdao.com第十五天_JavaScript 对象的继承_prototype原型对象_封装_函数式编程

    javascript 内置了许多 function 函数(){...} js 执行首先就会执行自己内置的函数定义 (function Function.function Object) 对象的继承 大 ...

  3. (76)Wangdao.com第十四天_JavaScript 正则表达式对象 RegExp

    RegExp Regular Expression,正则表达式是一种表达    文本模式(字符串结构)  的式子. 常常用来按照“给定模式”匹配文本.比如,正则表达式给出一个 Email 地址的模式, ...

  4. (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event

    浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核            Trident内核,也是俗称的IE内核Chrome 浏览器内核            统称为 Chromium 内核或 ...

  5. NLP(十五)让模型来告诉你文本中的时间

    背景介绍   在文章NLP入门(十一)从文本中提取时间 中,笔者演示了如何利用分词.词性标注的方法从文本中获取时间.当时的想法比较简单快捷,只是利用了词性标注这个功能而已,因此,在某些地方,时间的识别 ...

  6. SpringMVC(十五) RequestMapping map模型数据

    控制器中使用map模型数据,传送数据给视图. 控制器参考代码: package com.tiekui.springmvc.handlers; import java.util.Arrays; impo ...

  7. R in action读书笔记(20)第十五章 处理缺失数据的高级方法

    处理缺失数据的高级方法 15.1 处理缺失值的步骤 一个完整的处理方法通常包含以下几个步骤: (1) 识别缺失数据: (2) 检查导致数据缺失的原因: (3) 删除包含缺失值的实例或用合理的数值代替( ...

  8. 测开之路一百五十五:jquery-validation前台数据验证

    前面做的wtform验证是服务器端的验证,需要把数据传输到服务器,服务器验证后再吧结果传输到前端,网络慢的时候,用户体验不好,所以需要前端验证,且后端验证不能少 传统的js或者jquery如果要验证信 ...

  9. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

随机推荐

  1. How to learn PDE (怎么学偏微分方程)

    To learn PDE, you need some knowledge of physics (to build up the intuition), solid training of anal ...

  2. springMVC工作过程

    学习springmvc之前先学习一下他的工作过程 如图 1.用户通过客户端向服务器发送请求,请求会被springMVC的前端控制器DispatchServlet所拦截. 2.DispatchServl ...

  3. MySQL学习10 - 多表查询

    一.多表连接查询 1.交叉连接 2.内连接 3.外连接之左连接 4.外连接之右连接 5.全外连接 二.符合条件连接查询 三.子查询 1.带in关键字的子查询 2.带比较运算符的子查询 3.带EXIST ...

  4. ERROR [main] master.HMasterCommandLine Master exiting

    2018-05-18 07:07:26,257 INFO [main-SendThread(localhost:2181)] zookeeper.ClientCnxn: Opening socket ...

  5. SqlServer 语法

    四.            Ranking 排序与排名是我们最为常用的统计方式,比如对班级的学生根据成员进行排名,或者按照成绩高低把学生划分成若干梯队:比如最好成绩的10名学生属于第一梯队,后10名又 ...

  6. Python 入门基础15 --shutil、shelve、log常用模块2、项目结构

    今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datatime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...

  7. 函数的if--while流程控制

    一.流程控制---if 1.if条件判断 age=18 hight=1.70 sex="female" is_beautiful=True if sex=="female ...

  8. Docker入门-安装(一)

    Docker  在CentOS 7.0下安装Docker, CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态 firewall-cmd --state 停止firewall ...

  9. Windows下ToroiseSVN基本使用&&在Visual studio中使用SVN

    首先在 https://tortoisesvn.net/downloads.html 下载svn客户端 下载并安装好之后再开始菜单会出现如下图标: 现在可以开始使用TortoiseSVN了,选择一个本 ...

  10. 【原创】大数据基础之ORC(1)简介

    https://orc.apache.org Optimized Row Columnar (ORC) file 行列混合存储 层次结构: file -> stripes -> row g ...