请稍候,加载中....

JavaScript JSON

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>

 


Python学习手册-