文介绍了兼容ECMAScript 5 标准的原生JSON对象. 在不支持原生JSON对象的旧版本Firefox中,该如何处理JSON数据.请查看 JSON.

原生JSON对象包含有两个关键方法.JSON.parse()方法用来解析JSON字符串,并且重构为JavaScript对象,而JSON.stringify()方法可以将javascript对象转换为等价的JSON字符串.

注意:由于JSON规范的限制,如果一个对象存在属性值为函数的属性,则在使用JSON.stringify()方法对该对象进行序列化时.这个属性将不会被遍历到.

解析JSON字符串

将JSON字符串解析成为一个JavaScript对象,你只需要将JSON字符串作为参数传递给JSON.parse()方法,如下:

var jsObject = JSON.parse(jsonString);
 

JavaScript 1.8.5 备注

引入于 JavaScript 1.8.5 (Firefox 4), JSON.parse()不允许最后一个键值对后面存在逗号

// JavaScript 1.8.5中,下述两行代码都会抛出SyntaxError异常
var jsObject = JSON.parse("[1, 2, 3, 4, ]");
var jsObject = JSON.parse("{ \"foo\" : 1, }");
 

将对象转为JSON

将一个JavaScript对象字符串化为JSON,你只需要将该对象作为参数传递给JSON.stringify()方法,如下:

var foo = {};
foo.bar = "new property";
foo.baz = 3; var jsonString = JSON.stringify(foo);
 

jsonString 的新值为'{"bar":"new property","baz":3}'.

从Firefox 3.5.4起, JSON.stringify()提供一个可选参数来提供额外的自定义转换方法的能力.如下:

jsonString = JSON.stringify(value [, replacer [, space]])

value
将要转为JSON字符串的javascript对象.
replacer
该参数可以是多种类型,如果是一个函数,则它可以改变一个javascript对象在字符串化过程中的行为, 如果是一个包含 String 和 Number 对象的数组,则它将作为一个白名单.只有那些键存在域该白名单中的键值对才会被包含进最终生成的JSON字符串中.如果该参数值为null或者被省略,则所有的键值对都会被包含进最终生成的JSON字符串中.
space
该参数可以是一个 String 或 Number 对象,作用是为了在输出的JSON字符串中插入空白符来增强可读性. 如果是Number对象, 则表示用多少个空格来作为空白符; 最大可为10,大于10的数值也取10.最小可为1,小于1的数值无效,则不会显示空白符. 如果是个 String对象, 则该字符串本身会作为空白符,字符串最长可为10个字符.超过的话会截取前十个字符. 如果该参数被省略 (或者为null), 则不会显示空白符.

replacer 参数

replacer参数可以是一个函数或者是一个数组.如果是函数, 则该函数会被传入两个参数, 分别是当前正在被字符串化的键值对的键和值. 初始化时,一个默认的键值对(键为空,值为要JSON化的对象)会传入这个函数, 然后,要JSON化的对象或者数组的每个键值对也会一级一级被传入这个函数. 该函数的返回值会影响正在被字符串化的键值对会不会被加入最终生成的JSON字符串中化,如下:

  • 如果返回一个 Number 类型的值, 则该数字会通过toString方法转换成字符串,来作为正在被字符串化的键值对中的值被添加到JSON字符串中.
  • 如果返回一个 String 类型的值, 则该字符串会作为正在被字符串化的键值对中的值被添加到JSON字符串中.
  • 如果返回一个Boolean类型的值, 则该布尔值会转化成字符串"true"或"false" ,来作为正在被字符串化的键值对中的值被添加到JSON字符串中.
  • 如果返回一个其他类型的对象, 则该对象的键值对会被递归的按照上述的规则添加到JSON字符串中, 但如果该对象是function类型的, 则它不会变遍历.replacer函数会转而处理下一个键值对.
  • 如果返回 undefined, 则该键值对不会被添加到JSON字符串中.
注意: 你不能通过 replacer 函数剔除数组中的某些值.

例子

function censor(key, value) {
if (typeof(value) == "string") {
return undefined;
}
return value;
} var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, censor);
 

jsonString 的新值为{"week":45,"month":7}.

如果 replacer 是一个数组, 则源对象中,只有键存在replacer数组中的键值对,才会被包含进最终的JSON字符串中.

相关链接

Using native JSON的更多相关文章

  1. #MySQL 5.7.8 支持Json类型

    As of MySQL 5.7.8, MySQL supports a native JSON data type that enables efficient access to data in J ...

  2. JSON的故事

    1.介绍JSON http://www.json.org/ https://developer.mozilla.org/zh-CN/docs/JSON 2.json的序列化和反序列化 序列化方法 va ...

  3. [转] json in javascript

    JavaScript is a general purpose programming language that was introduced as the page scripting langu ...

  4. JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法

    1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 var str = '[{"href":"baidu.com",&quo ...

  5. 转:关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法

    1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 ? 1 2 3 var str = '[{"href":"baidu.com&qu ...

  6. 数据序列化导读(3)[JSON v.s. YAML]

    前面两节介绍了JSON和YAML,本文则对下面的文章做一个中英文对照翻译. Comparison between JSON and YAML for data serialization用于数据序列化 ...

  7. jQuery.parseJSON vs JSON.parse

    转载:http://stackoverflow.com/questions/10362277/jquery-parsejson-vs-json-parse 一.JavaScript函数JSON.par ...

  8. JSON.parse()和jQuery.parseJSON()的区别

    jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的JavaScript对象   (jquery 方法) 1 2 3 var str = '[{&qu ...

  9. mysql json

    SELECT name, profile->"$.twitter" AS `twitter` FROM `user` WHERE profile->"$.tw ...

随机推荐

  1. (一)js概述

    1.    js:弱类型,动态类型,解释型的脚本语言. 2.    网景,布兰登艾奇,js和java没有关系,js的标准:ECMAscript. 3.    js组成:ECMAscript + Bom ...

  2. Java [Leetcode 357]Count Numbers with Unique Digits

    题目描述: Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. ...

  3. kali视频学习(11-15)

    第四周kali视频(11-15)学习 11.漏洞分析之OpenVAS使用 12.漏洞分析之扫描工具 13.漏洞分析之WEB爬行 14.漏洞分析之WEB漏洞扫描(一) 15.漏洞分析之WEB漏洞扫描(二 ...

  4. Android中Activity的LauchMode(加载模式)

    1.standard模式:一个task有多个Activity,一个Activity可以被实例化多次,可以放在不同的task中. 2.singleTop模式:该Activity在栈顶,同时收到启动该Ac ...

  5. 【LIUNX】目录或文件权限,权限授予

    三个三个一组看: 1. 第一段表示文件所有者对此文件的操作权限 2. 第二段表示文件所有者所在组对些文件的操作权限 3. 第三段表示除上述两种外的任何用户/组对此文件的操作权限 r读取:4 w写入:2 ...

  6. Oracle相关数据库操作

    1.进入oracle后台操作 su - oracle 2.数据库备份的指定位置 Oracle用sys用户登录查询数据库 select * from dba_directories a where a. ...

  7. Redis、Memcache和MongoDB

    一.Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰 ...

  8. 使用appassembler-maven-plugin插件生成启动脚本

    appassembler-maven-plugin可以自动生成跨平台的启动脚本,省去了手工写脚本的麻烦,而且还可以生成jsw的后台运行程序. 首先pom引入相关依赖 <build> < ...

  9. 使用BasicDataSource连接池连接oracle数据库报错ORA-12505

    先看连接池配置: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" ...

  10. (转)Oracle存储过程基本语法

    本文转载自:http://www.cnblogs.com/hero4china/articles/base_rule_oracle_procedure.html 存储过程 1  CREATE OR R ...