20.JSON
JSON是javascript的一个子集,利用js中的一些儿模式来表示结构化数据。不是只有javascript才使用JSON,JSON是一种数据格式,很多编程语言都有针对JSON的解析器和序列化器。
JSON的语法可以表示一下三种类型的值:
简单值:可以在JSON中表示字符串、数值、布尔值和null ; 但不支持js中的特殊值 undefined
对象:表示的是一组有序的键值对儿
数组:表示的是一组有序的值得列表
简单值:
-数值(整数或者浮点数
-字符串(必须在引号里)
-布尔值
-null
对象值:
javascript中的对象字面量:
var person = {
name:"Zhou",
age:29
};
json中的对象要求必须给属性加引号,如下:
{
"name":"Zhou",
"age":29
}
JSON中没有变量的概念,其次末尾不用分号。属性的值可以是简单值,也可以是复杂类型值,可以在对象中嵌入对象:
{
"name":"Zhou",
"age":29,
"school":{
"name":"XXX College",
"address":"XXXXXXXXXX"
}
}
数组:
JSON数组采用的及时JS里的数组字面量形式
[ 25, "age", true ]
同样没有变量和分号。
JSON对象有两个方法:stringify() 和 parse(),这两个方法 分别用于把javascript对象序列化为JSON字符串解析为javascript值。
var people = {
name:"小明",
age:25,
friends:[
"小红",
"小兰"
]
}
var json = JSON.stringify(people);
alert(json);
// 返回结果:{"name":"小明","age":25,"friends":["小红","小兰"]}
上面例子JSON.stringify()把一个javascript对象序列化为一个JSON字符串,然后将它保存在变量json中。默认请款下,输出的JSON字符串不包含任何空格字符或缩进。
在序列化javascript对象是,所有函数及原型成员都会被有意忽略,值为undefined的任何属性也会被跳过。
将JSON字符串直接传递给JSON.parse()就可以得到相应的javascript的值。
JSON除了序列化javascript对象外,还可以接受多个参数。
第二个参数可以是个数组,也可以是函数:
var people = {
name:"小明",
age:25,
friends:[
"小红",
"小兰"
]
}
var json = JSON.stringify(people,["name","friends"]);
alert(json);
//返回结果:{"name":"小明","friends":["小红","小兰"]}
如果第二个参数是函数:
var people = {
name:"小明",
age:25,
friends:[
"小红",
"小兰"
]
}
var json = JSON.stringify(people,function(key,value){
switch(key){
case "name":
return "小军";
case "age":
return 20;
case "friends":
return null;
default:
return value;
}
});
alert(json);
//返回结果:{"name":"小军","age":20,"friends":null}
第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示缩进的空格数,最大缩进空格数为10,所有大于10的值都会自动转换为10。只要传入有效的数值,结果字符串就会包含换行符。
如果缩进参数是字符串而非数值,则这个字符将在JSON字符串中被用作缩进字符,缩进字符串最长不能超过10个字符长,超过10个结果中将出现前10个字符。
var people = {
name:"小明",
age:25,
friends:[
"小红",
"小兰"
]
}
var json = JSON.stringify(peopl,null,10);
//var json = JSON.stringify(peopl,null,"hello");
alert(json);
20.JSON的更多相关文章
- json死循环问题
20.JSON死循环问题: 向前台发送的数据: 出现此类问题主要是由于在所传数据中有包含关系,比如ElementGroup中有Element,Element中又有ElementGroup,此时就会出现 ...
- js学习-自定义函数、对象的字面量、json对象学习小结
一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...
- Qt之json解析
Jsoner::Jsoner(QObject *parent) : QObject(parent){ QJsonObject json; json.insert("loginna ...
- json字符串和对象的相互转化
json在代码中是经常用到的,在此总结一下json字符串和对象及数组之间的相互转化: 1.javascript函数方式: <1> JSON.stringify :把一个对象转换成json字 ...
- json格式处理及扩展
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.js"></script> < ...
- java json转换(二)
package com.kps.common.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArra ...
- Python序列化-pickle和json模块
Python的“file-like object“就是一种鸭子类型.对真正的文件对象,它有一个read()方法,返回其内容.但是,许多对象,只要有read()方法,都被视为“file-like obj ...
- 数据序列化导读(3)[JSON v.s. YAML]
前面两节介绍了JSON和YAML,本文则对下面的文章做一个中英文对照翻译. Comparison between JSON and YAML for data serialization用于数据序列化 ...
- 带有function的JSON对象的序列化与还原
JSON对象的序列化与反序列化相信大家都很熟悉了.基本的api是JSON.parse与JSON.stringify. var json={ uiModule:'http://www.a.com', ...
随机推荐
- Cogs 1264. [NOIP2012] 开车旅行(70分 暴力)
1264. [NOIP2012] 开车旅行 ★★☆ 输入文件:drive.in 输出文件:drive.out 简单对比时间限制:2 s 内存限制:128 MB [题目描述] 小A 和小 ...
- 洛谷P4707 重返现世(扩展MinMax容斥+dp)
传送门 我永远讨厌\(dp.jpg\) 前置姿势 扩展\(Min-Max\)容斥 题解 看纳尔博客去→_→ 咱现在还没搞懂为啥初值要设为\(-1\)-- //minamoto #include< ...
- 洛谷P5159 WD与矩阵
题目背景 WD整日沉浸在矩阵中,无法自拔-- 题目描述 WD特别喜欢矩阵,尤其是\(01\)矩阵. 一天,CX给了WD一个巨大的\(n\)行\(m\)列的\(01\)矩阵,WD发现这个矩阵每行.每列的 ...
- Windows平台Anaconda使用笔记
1.官网下载anaconda安装. 2.将命令行工具路径加入系统环境变量 C:\ProgramData\Anaconda3\ScriptsC:\ProgramData\Anaconda3\Librar ...
- linux限制内存和磁盘使用
一.如何限制用户的磁盘空间 1. 查看系统中所有用户的磁盘空间配额 sudo repquota /dev/vda1 2. 查看某个用户的磁盘空间配额 sudo edquota user_name 要想 ...
- 使用Collectd + InfluxDB + Grafana进行JMX监控
我们已经看到使用Collectd监控CPU /内存利用率(本文).但它没有提供所有信息来确定性能问题的瓶颈.在本文中,我们将使用Collectd Java插件来使用其JMX技术来监视和管理Java虚拟 ...
- 不要忽视Web编程中的小细节
概述:长时间以来,我们创造了某些在构造和范围内用以提升网站易用性的约定和实践.然后在我们进行web编程的时候总有一些疏忽和纰漏.这里总结了一些web编程时容易出现的小错误,并给出了相应的补救方法,希望 ...
- POJ1022 Packing Unit 4D Cubes
题目来源:http://poj.org/problem?id=1022 题目大意: 有一些4维的单位体积的立方体盒子,每个立方体有8个面.要用一个大的4为盒子将它们包起来,求最小的大盒子体积. 输入: ...
- vuex和localStorage/sessionStorage 区别
1.最重要的区别:vuex存储在内存,localstorage则以文件的方式存储在本地 2.应用场景:vuex用于组件之间的传值,(响应式的),localstorage则主要用于不同页面之间的传值(其 ...
- LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Fo ...