JSON 是JavaScript Object Notation 的缩写,是基于Javascript 的字面量表达方式的数据格式类型。
JSON 能够通过4种基本数据类型以及2种结构化数据类型来表示。分别为:(基本数据类型:)字符串值型、数值型、布尔 型、null型、(结构化数据类型:)对象、数组。
数据类型 | 实例 | 注意 |
---|---|---|
字符串值 | "FOREVER" | 不能用单引号。字符串的默认编码为UTF-8 |
数值 | 12 | 只支持10进制书写方式 |
布尔值 | true或false | |
null值 | null | |
对象 | {"name":"lym","id":"007"} | 属性名只能用字符串的方式表示,不能用{name:lym}这样的字面量形式 |
数组 | {1,2,'forever'} | 数组中的元素可以被指定为任意类型的值 |
在实际程序开发中,经常需要将 JSON 格式数据类型的字符串与 JS 对象进行相互转换。
我们在将 JSON 数据发送到外部时,需要将内部的对象转换为 JSON 字符串之后再传输,另外,在接受 JSON 数据的场合,我们又需要将 JSON 字符串转换为 JS 对象,从而方便获取数据。
早期,一般用 eval 函数的方式将 JSON 字符串转换为 JS 对象。传递给 eval 函数的字符串将被看作是JS代码并被执行。由于被传递的字符串会被作为代码进行求值,所以其中的语句或函数调用也会一起执行。这在接受不被信任的外部 JSON 数据时是非常危险的。因此,从安全性考虑,一般情况是不建议使用 eval 函数的。此外,eval 函数本身也有些问题。
因为 eval 函数会将参数解释为JS语句,所以 {"id":1} 不会被看作是对象字面量,而会被解释为一条在代码块中有一个标签x的语句。为了让这条语句能够被解释为对象字面量,必须像 eval('({"id":1})') 一样再使用一组圆括号。
后来,为了解决这类问题,就出现了用于分析JSON字符串的库,比较有代表性的是 json2.js。
再后来,随着 JSON 的广泛应用,JSON分析器不再以外部库的形式存在,而是在 JS 的实现中提供了用于分析 JSON 字符串的 API 。
属性名 | 说明 |
---|---|
parse(text[, reviver]) | 对参数text这一JSON字符串进行分析之后返回一个JS对象。reviver将会对每个属性调用回调函数,并将返回值赋为属性值 |
stringify(value[, replacer[, space]]) | 将参数value转换为JSON字符串。replacer将会对每个属性调用回调函数,并将返回值赋为属性值。space则是输出是的一个缩进字符串 |
将JSON字符串转换为对象:
将对象转换为JSON字符串:
将JSON字符串的数组转换为对象的数组:
将字符串型的JSON字符串转换为字符串值:
最后,再总结下 JOSN 的特点:
-
JSON 是轻量级的文本数据交换格式
-
JSON 独立于语言
-
JSON 具有自我描述性,更易理解
* JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
原文地址: http://liaoyuming.cn/?p=104