详解JSON数据格式

详解JSON数据格式在目前的开发中 JSON 是一种非常重要的数据格式 它并不是编程语言 而是一种可以在服务器和客户端之间传输的数据格式 JSON 的全称是 JavaScriptOb JavaScript 对象符号 JSON 是由 DouglasCrock 构想和设计的一种轻量级数据交换格式 算是 JavaScript 的一个子集很多编程语言都实现了将 JSON 转为对应模型的方式其他的传输格式 XML 在早期的网络传输中主要是使用 XML 来进行数据交换的 但是这种格式在解析 传输等各方面都弱于 JSON

JSON 的由来

JSON 的基本语法

JSON数据形式:

5 // 数值 "Hello JavaScript" // 字符串 null 

与JavaScript不同,JSON中的对象要求给属性加上引号:

{ 
    "name": "JS人柱力"; "age": 100 } // 属性的值也可以是复杂类型 { 
    "school": { 
    "name": "hafo", "location": "Harbin" } } 

数组

JSON表示数组:

[100, "JS人柱力", true] 

JSON数组没有变量和分号。

把数组和对象结合,可以构造复杂的数据集合:

[ { 
    "title":"js", "authors":[ "张三" ], edition: 2 }, { 
    "title":"MySQL从删库到跑路", "authors":[ "李四" ], edition: 3 }, { 
    "title":"Dreamweaver从安装到卸载", "authors":[ "王五" ], edition: 4 } ] 

解析与序列化

JSON对象

JSON对象有两个方法:

stringfy():把JavaScript对象序列化为JSON字符串 parse():。把JSON字符串解析为原生JavaScript值 

示例:

var book = { 
    "title":"Java从入门到放弃", "authors":[ "张三" ], edition: 2 }; var jsonText = JSON.stringify(book); alert(jsonText); // {"title":"Java从入门到放弃","authors":["张三"],"edition":2} 

上面的例子将一个JavaScript对象序列化为一个JSON字符串。默认情况下,JSON.stringify()不包含任何字符或缩进。

将JSON字符串直接传递个JSON.parse()可以得到相应的JavaScript值。

var newBook = JSON.parse(jsonText);

JSON.stringify()还可以接收两个参数:

第一个参数:过滤器,一个数组或一个函数。 第二个参数:一个选项,表示是否在JSON字符串中保留缩进 

过滤结果

如果参数是数组,JSON.stringify()的结果只包含数组中列出的属性。

var book = { 
    "title":"Java从入门到放弃", "authors":[ "张三" ], edition: 2 }; var jsonText = JSON.stringify(book, ["title", "authors"]); console.log(jsonText); // {"title":"Java从入门到放弃","authors":["张三"]} 

如果参数是函数,传入的函数接收两个参数,属性名和属性值,根据属性名可以知道如何处理属性。属性名是字符串,属性值并非键值对的值,键名可以是空字符串。

返回的值是相应键的值,如果函数返回undefined,那么该属性就会被忽略。

var book = { 
    "title":"Java programming", "authors":[ "张三", "李四" ], edition: 2 }; var jsonText = JSON.stringify(book, function (key, value) { 
    switch (key) { 
    case "authors": return value.join("-"); // 用“-”分割数组 case "edition": return undefined; default : return value; } }); console.log(jsonText); // {"title":"Java programming","authors":"张三-李四"} 

字符串缩进

JSON.stringify()的第三个参数用于控制结果中的缩进和空白符。如果是数值,表示每格缩进的空格数。

var book = { 
    "title":"Java programming", "authors":[ "JS人柱力", ], edition: 2 }; var jsonText = JSON.stringify(book, null, 4); console.log(jsonText); 

如果是字符串,这个字符串将用作JSON字符串的缩进符

var book = { 
    "title":"Java programming", "authors":[ "JS人柱力", ], edition: 2 }; var jsonText = JSON.stringify(book, null, "__"); console.log(jsonText); 【显示结果】: 
{ 
    __"title": "Java programming", __"authors": [ ____"JS人柱力" __], __"edition": 2 } 

JSON.stringify()并不能满足所有对象进行序列化的需求。可以给对象定义toJSON()方法,返回其自身的JSON数据格式。

示例:

var book = { 
    "title":"Java programming", "authors":[ "JS人柱力", ], edition: 2, toJSON: function () { 
    return "==="+this.title+"==="; } }; var jsonText = JSON.stringify(book); console.log(jsonText); // "===Java programming===" 

解析选项

JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用。如果返回undefined,表示从结果中删除相应的键,如果返回其他值,则将该值插入到结果中。

var book = { 
    "title":"Java programming", "authors":[ "JS人柱力", ], edition: 2, year: 2022, releaseDate: new Date(2022, 11, 1) }; var jsonText = JSON.stringify(book); var newBook = JSON.parse(jsonText, function (key, value) { 
    if (key == "releaseDate") { 
    return new Date(value); } else { 
    return value; } }); console.log(newBook.releaseDate.getFullYear()); // 2022 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222815.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:57
下一篇 2026年3月17日 下午2:58


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号