一. json可以表示3种类型的值:

  简单值 、 对象、 数组 
 
表示对象时:》1. 没有变量的概念 ,所以不用申明变量
                   》2. 没有末尾结束时的分号 ;
                   》3. 对象属性并需要加 双引号 
                   》4. 同一对象中绝不能出现两个同名属性
 
二.json 的两个方法:
 
    JSON.stringify (object); , JSON.parse (object);
    在简单情况下,以上两个方法,用于把javascript对象序列化, 和把JSON字符串解析为原生javascript的值
    eg:执行如下代码,会在浏览器显示 {"title":"A book title","authors":["ren jing"],"edition":3,"year":2011} 此结果
     var book = {
"title" : "A book title",
"authors" : [
"ren jing"
],
edition : 3,
year : 2011
};
var jsonText = JSON.stringify(book);
document.write(jsonText);

1. 对于详细序列化 javascript 使用 JSON.stringify (object )时 ,还可再传入两个参数;

》  第一个参数 为过滤器 ,可以为数组:

var jsonText = JSON.stringify(book,["title","edition"]);

也可以为函数,当传入的为函数时,传入的函数接收两个参数,属性名和属性值:

     var jsonText = JSON.stringify(book,function(key,value){
switch(key){
case "authors":
return value.join(",");
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
alert(jsonText);

运行结果为:{"title":"A book title","authors":"ren jing","year":5000}

》第二个参数是一个选项,表示是否在JSON字符串中保留缩进,用于控制结果中的缩进和空白符。

若这个参数是一个数值,那它表示每个级别缩进的空格数(最大缩进空格数为10,所有大于10的数会自动转换为10):

var jsonText = JSON.stringify(book,null,10);

若缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符(不再使用空格,最大限制依然为10):

var jsonText = JSON.stringify(book,null,"- -"); 

有时候我们可以定义一个toJSON()方法,返回其自身的JSON数据格式,更好的进行自定义序列化的需求。

  对于序列化对象的顺序,我们应该注意的是:

(1)如果存在toJSON()方法且能通过它取得有效的值,则调用该方法。否则,返回对象本身。

(2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。

(3)对于第(2)步返回的每个值进行相应的序列化。

(4)如果提供了第三个参数,执行相应的格式化。

2.对于解析json数据,也可以接受另一个参数,该参数是一个函数:

     var book = {
"title" : "A book title",
"authors" : [
"ren jing"
],
edition : 3,
year : 2011,
releaseDate : new Date(2015,07,1)
};
var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText,function(key,value){
if(key =="releaseDate"){
return new Date(value);
}else{
return value;
}
})
alert(bookCopy.releaseDate.getFullYear());

通过添加releaseDate属性,通过序列化将数据序列化为有效的JSON字符串后 ,再进行解析,运行结果为:2015

(将此内容作为自己的个人笔记,参考来源于javascript高级程序设计 第三版)

json相关的一些用法的更多相关文章

  1. json简介及JsonCpp用法

    [时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...

  2. 关于 pgsql 数据库json几个函数用法的效率测试

    关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ...

  3. boost json生成和解析用法

    json c++库还是有很多的,因为工作上经常使用boost,这里选用boost的json,记录下用法. 举个栗子: 如果我们要生成如下格式的json: { "name":&quo ...

  4. json相关知识

    整理json相关知识: 1.for in 循环获取json中的键(key)与值(value) <!DOCTYPE html> <html lang="en"> ...

  5. SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法

    create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...

  6. jquery下json数组的操作用法实例

    jquery下json数组的操作用法实例: jquery中操作JSON数组的情况中遍历方法用的比较多,但用添加移除这些好像就不是太多了. 试过json[i].remove(),json.remove( ...

  7. plpgsql 数组、JSON相关

    Function Return Type Description Example Result array_append(anyarray,anyelement) anyarray append an ...

  8. react第十七单元(redux和组件之间的通信,react-redux的相关api的用法)

    第十七单元(redux和组件之间的通信,react-redux的相关api的用法) #课程目标 什么是redux-redux react-redux的作用是什么 react-redux如何应用 #知识 ...

  9. Cocos2d-x数据相关的类用法简介(附示例)

    (搬运自我在SegmentFault的博客) 在Cocos2d-x的学习和使用中,我遇到了很多关于数据的操作.在这个过程中,我学习了Cocos2d-x自带的很多功能.下面我把接触到的类罗列在下面,给出 ...

随机推荐

  1. java的关闭钩子(Shutdown Hook)

    Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...

  2. 重建索引提高SQL Server性能

    大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数 ...

  3. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  4. android学习第一篇 基本概念

    一.   1.  Android 四大組件 Activity , Service  , BroadcastReceiver ,ContentProvider 2.  多個Activity組成棧,當前A ...

  5. 泛型T的类型获取

    T.getClass()或者T.class都是非法的,因为T是泛型变量. 由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型. /** * 可以在service层直 ...

  6. 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】

    一.SSH整合之后事务问题和总结 1.引入问题:DAO层测试 假设将User对象设置为懒加载模式,在dao层使用load方法. 注意,注释不要放开. 使用如下的代码块进行测试: 会报错:no sess ...

  7. Flume(3)source组件之NetcatSource使用介绍

    一.概述: 本节首先提供一个基于netcat的source+channel(memory)+sink(logger)的数据传输过程.然后剖析一下NetcatSource中的代码执行逻辑. 二.flum ...

  8. 使用sublimehighlight 将文本 转化html

    a = "aaa" b = "bbb" c = "ccc" final = a + b + c print final import sys ...

  9. 【转载】关于treeview的多层显示的科学用法!

    http://blogs.msdn.com/b/mikehillberg/archive/2009/10/30/treeview-and-hierarchicaldatatemplate-step-b ...

  10. string,stringbuilder,stringbuffer用法

    总结:1.如果要操作少量的数据用 = String   ==================================>字符串常量2.单线程操作字符串缓冲区 下操作大量数据 = Strin ...