JSON 是用于存储和传输数据的格式。
JSON 通常用于服务端向网页传递数据 。
什么是 JSON?
- JSON 英文全称 JavaScript Object Notation
- JSON 是一种轻量级的数据交换格式。
- JSON是独立的语言 *
- JSON 易于理解。
* JSON格式是一种对象序列化格式规范,最早由Javascript支持,用于在程序之间进行数据交换,逐渐得到大多数编程语言的支持,甚至可以在不同的语言之间传递对象。使用JSON格式序列化的对象为一个字符串文本,可以被任何编程语言读取及作为数据格式传递。
JSON 语法规则
JSON 格式在语法上与创建 JavaScript 对象代码是相同的。
由于它们很相似,所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象。
JSON 语法规则
- 数据为 键/值 对。
- 数据由逗号分隔。
- 大括号保存对象
- 方括号保存数组
JSON 对象
javascript中提供了JSON
对象用于json相关操作
JSON
对象提供了两个方法
函数 | 描述 |
---|---|
JSON.parse() | 用于将一个 JSON 字符串转换为 JavaScript 对象。 |
JSON.stringify() | 用于将 JavaScript 值转换为 JSON 字符串。 |
JSON 反序列化
使用JSON.parse()
方法来将json格式的字符串反转为javascript对象、数组
JSON.parse(text[, reviver])
参数说明:
- text:必需, 一个有效的 JSON 字符串。
- reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
javascript反序列化实例
<script>
// 这里需要注意json_string是字符串
json_string = '{"sites":[ \
{"name":"猿变", "url":"www.python-xp.com"}, \
{"name":"谷歌", "url":"www.google.com"} \
]}'
// obj 为反序列化后的结果
obj = JSON.parse(json_string)
for (i in obj){
for (site in obj[i]){
document.write(obj[i][site].name + "=>" + obj[i][site].url + "<br>")
}
}
</script>
可以看到,json字符串的格式与javascript中的数组、对象很相似
使用可选参数reviver
reviver
为一个函数,传入两个参数。下面示例将值转换为大写返回
<script>
json_string = '{"sites":[ \
{"name":"猿变", "url":"www.python-xp.com"}, \
{"name":"谷歌", "url":"www.google.com"} \
]}'
// mymap返回大写
function mymap(key, val){
if (typeof(val) == "string"){
return val.toUpperCase()
}
return val
}
// 传入mymap函数
obj = JSON.parse(json_string, mymap)
for (i in obj){
for (site in obj[i]){
document.write(obj[i][site].name + "=>" + obj[i][site].url + "<br>")
}
}
</script>
JSON序列化
序列化操作通过 JSON.
stringify()
方法将javascript对象或者数组转为json字符串
JSON.stringify(value[, replacer[, space]])
参数说明:
- value:
必需, 要转换的 JavaScript 值(通常为对象或数组)。
- replacer:
可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
- space:
可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
javascript序列化实例
<script>
sites = [{"name":"猿变", "url":"www.python-xp.com"},
{"name":"谷歌", "url":"www.google.com"}
]
json_string = JSON.stringify(sites)
document.write(json_string)
</script>
可以看到json字符串结构看上去与javascript的数组、对象结构很像,只是类型为字符串
使用可选参数
<script>
sites = [{"name":"猿变", "url":"www.python-xp.com"},
{"name":"谷歌", "url":"www.google.com"}
]
// 定义replace函数, 将com替换为net
function replace(key, val){
document.write(key + "=>" + val + "<br>")
if (/\.com/.test(val)){
return val.replace("com", "net")
}
return val
}
// 传入replace函数
json_string = JSON.stringify(sites, replace, "\t")
document.write("<br>"+"*".repeat(10)+"转换结果"+"*".repeat(10)+"<br>")
document.write(json_string)
</script>
讨论区