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的更多相关文章

  1. json死循环问题

    20.JSON死循环问题: 向前台发送的数据: 出现此类问题主要是由于在所传数据中有包含关系,比如ElementGroup中有Element,Element中又有ElementGroup,此时就会出现 ...

  2. js学习-自定义函数、对象的字面量、json对象学习小结

    一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...

  3. Qt之json解析

    Jsoner::Jsoner(QObject *parent) : QObject(parent){    QJsonObject json;    json.insert("loginna ...

  4. json字符串和对象的相互转化

    json在代码中是经常用到的,在此总结一下json字符串和对象及数组之间的相互转化: 1.javascript函数方式: <1> JSON.stringify :把一个对象转换成json字 ...

  5. json格式处理及扩展

    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.js"></script> < ...

  6. java json转换(二)

    package com.kps.common.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArra ...

  7. Python序列化-pickle和json模块

    Python的“file-like object“就是一种鸭子类型.对真正的文件对象,它有一个read()方法,返回其内容.但是,许多对象,只要有read()方法,都被视为“file-like obj ...

  8. 数据序列化导读(3)[JSON v.s. YAML]

    前面两节介绍了JSON和YAML,本文则对下面的文章做一个中英文对照翻译. Comparison between JSON and YAML for data serialization用于数据序列化 ...

  9. 带有function的JSON对象的序列化与还原

      JSON对象的序列化与反序列化相信大家都很熟悉了.基本的api是JSON.parse与JSON.stringify. var json={ uiModule:'http://www.a.com', ...

随机推荐

  1. Bloomberg 专线配置问题

    其实很简单,满足bbg的要求就可以了, 配置如下几个网段的路由: 208.134.161.0 using the subnet mask of 255.255.255.0 205.183.246.0 ...

  2. 51nod1118(递推)

    题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 题意: 中文题诶~ 思路: 因为机器人只能往下或者右 ...

  3. thinkphp5.1页面页面模板及参数配置

    success和error跳转的模板在thinkphp/tpl/dispatch_jump.tpl 配置参数在thinkphp\library\traits\controller\jump.php文件 ...

  4. Tensorflow安装教程-Win10环境下

    背景:最新版的Tensoflow已经支持Python3.6 首先,下载并安装Anaconda3 内置Python3.6的版本 https://www.continuum.io/downloads 安装 ...

  5. Java集合——集合框架Set接口

    1.Set接口 一个不包含重复元素的collecyion.更确切的讲,set不包含满足e1.equals(e2)的元素e1和e2,并且最多包含一个null元素. 2.HashSet 类实现Set接口, ...

  6. Java面向对象_继承——基本概念以及管理化妆品实例分析

    一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...

  7. Spark编程环境搭建及WordCount实例

    基于Intellij IDEA搭建Spark开发环境搭建 基于Intellij IDEA搭建Spark开发环境搭——参考文档 ● 参考文档http://spark.apache.org/docs/la ...

  8. 【Linux】Linux查看程序端口占用情况

    使用命令查询8880端口的占用信息: netstat -naop|grep 查询结果: 发现8880端口被PID为4518的进程占用 使用命令查询所有的进程和端口使用情况: netstat –apn ...

  9. Docker | 第一章:Docker简介

    前言 作为本系列的起始章节,本章节主要是对Docker的相关概念进行简单阐述下.自此也是查阅了相关资料,奈何也都是英文版居多,看的是有点头大的.现在悔不当初不好好学习英文了.o(︶︿︶)o 唉 Doc ...

  10. win7,docker安装后,创建虚拟机分配不了ip错误 err: exit status 255

    问题 win7装docker真麻烦,不如家里的win10爽.另外明明这是个很简单的操作,但是国内的解决方法有点落后,所以我写了个傻瓜式的. 有兴趣的可以直接看issue https://github. ...