JSON数据理解
话说JSON数据平常用的确实挺多的,但是基本上只知道怎么用,对其一些细节并没有整理过,今儿趁着下午有点空,坐下来,学习整理下,并分享出来。
对于JSON,首先它只是一种数据格式,并非一种语言,虽然和javascript长的比较像,但并不从属于javascript。如果你使用过其他编程语言,就会知道,其他语言也有针对JSON的解析器和序列化器。
JSON可以表示以下3中类型的值
- 简单值 如字符串、数值、布尔值和null,但不支持undefined
- 对象 对象作为一种复杂的数据类型,表示是一组无序的键值对儿,值可以是简单值也可以复杂的数据
- 数组 数组作为一种复杂的数据类型,表示是一组有序的列表儿,可以通过索引来获取引用的值,值可以是简单值,也可以复杂数据对象
1 . 简单值
简单值里没有什么可以重点讲的,主要强调一点,而且非常重要,那就是 JSON 字符串必须使用双引号,单引号会报错。
2. 对象
javascript 中的对象
var object = {
name:"suyq",
age :9
}
JSON 对象
{
"name":"suyq",
"age" :9
}
与javascript对象相比,JSON对象有两个地方不一样
- 没有声明变量(JSON中没有变量的概念)
- 末尾没有分号
再说一遍 对象的属性必须加双引号,这个是必须的。
属性的值可以是简单类型,也可以是复杂类型的值。
{
"name":"suyq",
"age" :9,
"school":{
"name":"tjn",
"location":"tj"
}
}
3.数组
javascript中的数组字面量
var v = [1,"hi",true];
JSON中的数组
[
{
"name": "张三",
"age": 18
},
{
"name": "李四",
"age": 22
},
{
"name": "王五",
"age": 20
}
]
JSON对象
json 对象主要有两个方法
JSON.stringify();
把javascript 对象转换为json对象
var book =
{
title:"javascript",
authors:["li","susan"],
year:2011,
edition:undefined
};
console.log(JSON.stringify(book));
输出结果:
{"title":"javascript","authors":["li","susan"],"year":2011}
默认情况下,javascript.stringify()所输出的json 字符串不包含任何空格字符和缩进。
值为undefined的任何属性会被跳过。
序列号选项
javascript.stringify() 函数还可以接收两个参数,第一个参数是个过滤器,可以是个数组,也可以是个函数,第二个是字符串中保留缩进。
1.过滤器
var book =
{
title:"javascript",
authors:["li","susan"],
year:2011,
edition:undefined
};
console.log(JSON.stringify(book,["title"]));
输出结果:{"title":"javascript"}
如果第二个参数是函数,传入的函数有两个参数,属性键名和键值。话不多说,直接上例子。
var book =
{
title:"javascript",
authors:["li","susan"],
year:2011,
edition:undefined
};
console.log(JSON.stringify(book,function(key,value){ switch (key)
{
case "authors":
return value.join(",");
case "edition":
return undefined;
default :
return value;
}
}));
输出结果:{"title":"javascript","authors":"li,susan","year":2011}
2.字符串缩进
var book =
{
title:"javascript",
authors:["li","susan"],
year:2011,
edition:undefined
};
console.log(JSON.stringify(book,function(key,value){ switch (key)
{
case "authors":
return value.join(",");
case "edition":
return undefined;
default :
return value;
}
},5));
输出结果:
{
"title": "javascript",
"authors": "li,susan",
"year": 2011
}
注意:最大缩进空格数为10 ,大于10 自动转换为10缩进。
2.toJSON 方法
var book =
{
title:"javascript",
authors:["li","susan"],
year:2011,
edition:undefined,
toJSON :function()
{
return this.title;
}
};
输出结果:"javascript"
有时候如果JSON.stringify()还无法满足序列化需求,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。
toJSON()函数可以作为过滤器的补充。
把一个对象传入JSON.stringify(),序列化顺序如下
1.如果存在toJSON()方法,而且通过它可以取到有效值,则先调用它。否则,按照默认顺序执行序列化
2.如果提供第二个参数,执行该过滤器,传入过滤器的值是第一步的返回值
3.对第二步返回的值进行相应的序列化
4.如果提供了第三个参数,执行的相应的格式化
JSON.parse();
json.parse() 也可以接收另一个参数,该参数也是一个函数。
var book =
{
title:"javascript",
authors:["li","susan"],
year:2011,
edition:undefined,
releaseDate:new Date(2011,1,1) };
var jsonText = JSON.stringify(book);
var bookcopy = JSON.parse(jsonText,function(key,value){
if(key=="releaseDate")
{
return new Date();
}else
{
return value;
}
})
console.log(bookcopy.releaseDate.getFullYear());
输出结果:2016
JSON数据理解的更多相关文章
- 关于跨域读取json数据我的理解
这两天在做关于读取json数据的插件,想用getJSON读取数据: $.getJSON(http://www.xxxx.com/Titles.js, function (data) { console ...
- 彻底理解使用JavaScript 将Json数据导出CSV文件
前言 将数据报表导出,是web数据报告展示常用的附带功能.通常这种功能都是用后端开发人员编写的.今天我们主要讲的是直接通过前端js将数据导出Excel的CSV格式的文件. 原理 首先在本地用Excel ...
- 跨域获取json一些理解[腾讯电商数据的拉取方式]
如何跨域获取json数据源?我们都知道要有callback,具体callback是如何工作的呢?如果服务器端不接收callback,我们是不是就没有办法处理了呢?读完本文后相信你会有一个大体的了解. ...
- 深入了解Struts2返回JSON数据的原理
首先来看一下JSON官方对于"JSON"的解释: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析 ...
- JSON数据解析 基础知识及链接收集
JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...
- Json数据的学习
JSON 教程 <body><h2>JSON Object Creation in JavaScript</h2> <p>Name: <span ...
- AJAX 跨域请求 - JSONP获取JSON数据
Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...
- iOS - JSON 数据解析
iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...
- 【转】Jquery ajax方法解析返回的json数据
转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...
随机推荐
- HDFS的shell操作
bin/hadoop命令操作: namenode -format 格式化文件系统 fs(缩写:FileSystem) 运行一个文件系统的用户客户端 bin/hadoop fs常用命令操作: -ls h ...
- HW7.1
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- Android下NFC的简单使用
现在很多手机已经配备了NFC(Near Field Communication 近场通信)的功能,我就为此专门研究过,可以到本文末尾下载源代码. Android官方资料:http://develope ...
- Django中的Model(操作表)
Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...
- 问题-Delphi控件选择卡自动选择与滚动方法
问题现象: 在D7的控件工具条中每次要手动点向左向右很累,有没有方法可以自动移动. 问题解决: REGEDIT4 [HKEY_CURRENT_USER\Software\Borland\Delph ...
- PCB编辑快捷键
TAB: 调节属性PgUp: 放大PgDn: 缩小Delete: 删除Ctrl+C: 复制Ctrl+V: 粘贴Ctrl+X: 剪贴Ctrl+Z: 撤销Ctrl+Y: 取消撤销Ctrl+F: 查找Ctr ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- MSSQLSERVER数据库- SQL删除重复数据的五种方式
删除重复的数据,在平时的工作中还是会和碰到的,感觉挺有用,从网上摘录的,记在这里,以备需要时查阅 --方法一,IN方式,适合2000/2005/2008,6728 毫秒 DELETE [student ...
- 教你50招提升ASP.NET性能(十一):避免在调试模式下运行网站
(17)Avoid running sites in debug mode 招数17: 避免在调试模式下运行网站 When it comes to ASP.NET, one of the most c ...
- The maximum number of cell styles was exceeded. You can define up to 4000 styles
POI操作Excel中,导出的数据不是很大时,则不会有问题,而数据很多或者比较多时, 就会报以下的错误,是由于cell styles太多create造成,故一般可以把cellstyle设置放到循环外面 ...