—————————————————————————————————————————————————————————

JSON

语法

"use strict";
// 简单值
"hello,world" // 必须使用双引号 // 对象
{
"name": "hugh",
"age": 12,
"school":
{
"name": "xzcit",
"location": "North Andover,MA"
}
} // 数组
[25, "hi", true] // 组合使用
[
{
"title": "Professional JavaScript",
"author": [
"Nicholas C.Zakas"
],
"edition": 3,
"year": 2002
},
{
"title": "Professional JavaScript",
"author": [
"Nicholas C.Zakas"
],
"edition": 4,
"year": 2003
},
{
"title": "Professional JavaScript",
"author": [
"Nicholas C.Zakas"
],
"edition": 5,
"year": 2004
}]

序列化JSON对象

  • stringify() - 把js对象序列化为json字符串
  • stringify()序列化对象的顺序
    • 如果存在toJSON方法并且能通过它取得有效的值,则调用该方法。否则返回对象本身
    • 如果提供了第二个参数,应用这个函数过滤器,传入函数过滤器的值是步骤1返回的值
    • 对步骤2返回的值进行相应的序列化
    • 如果提供了第三个参数,执行相应的格式化
"use strict";
var book = [{
"title": "Professional JavaScript1",
"author": [
"Nicholas C.Zakas",
"hugh"
],
"edition": 3,
"year": 2002
}];
// 使用JSON.stringify()把一个js对象序列化为一个json字符串,保存在变量jsonText中
var jsonText = JSON.stringify(book);
console.log(jsonText);
console.log(typeof jsonText); // string // 过滤结果
var jsonText = JSON.stringify(book, ["title", "year"]); // 过滤只保留title和year
console.log(jsonText); // 修改返回结果
var jsonText = JSON.stringify(book, function(key, value) { // 传入键值对
switch (key) {
case "author":
return value.join("||"); // 将数组连接成为字符串
case "year":
return 5000;
case "edition":
return undefined; // 返回undefined属性被忽略
default:
return value; // 其他返回本身值
}
});
console.log(jsonText); // 字符串缩进
var jsonText = JSON.stringify(book, null, 4); // 缩进4个空格,最大缩进10格
console.log(jsonText);
var jsonText = JSON.stringify(book, null, " - -"); // 特殊符号缩进
console.log(jsonText); // toJSON()方法
var book = [{
"title": "Professional JavaScript1",
"author": [
"Nicholas C.Zakas",
"hugh"
],
"edition": 3,
"year": 2002,
"toJSON": function() { // toJSON可以作为函数过滤器的补充
return this.title;
}
}];
var jsonText = JSON.stringify(book);
console.log(jsonText);

解析JSON对象

  • 早起JSON解析器是使用eval()函数,但eval()可能会执行恶意代码
  • parse() - 把json字符串解析为原生js值
"use strict";
var book = {
"title": "Professional JavaScript1",
"author": [
"Nicholas C.Zakas",
"hugh"
],
"edition": 3,
"year": 2002,
"releaseDate": new Date(2011, 11, 1)
};
var jsonText = JSON.stringify(book);
console.log(jsonText);
var bookCopy = JSON.parse(jsonText, function(key, value) {
if (key == "releaseDate") {
return new Date(value);
} else {
return value;
}
})
console.log(bookCopy.releaseDate);
console.log(bookCopy.year); //使用 JSON.parse 反序列化 ISO 格式的日期字符串, 将返回Date格式对象。
var jsonText = '{ "hiredate": "2008-01-01T12:00:00Z", "birthdate": "2008-12-25T12:00:00Z" }';
var dates = JSON.parse(jsonText, dateReviver);
function dateReviver(key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
}
}
return value;
};
console.log(dates.birthdate.toUTCString());

JavaScript | JSON基本格式的更多相关文章

  1. javascript中字符串格式json如何转化成json对象

    什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于 ...

  2. javascript中字符串格式转化成json对象记录

    什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于 ...

  3. JSON数据表示格式简介(JavaScript对象表示法)

    [1] JSON简介    > JSON全称 JavaScript Object Notation    > 类似于JS中对象的创建的方法    > JSON和XML一样,都是一种表 ...

  4. 4种解决json日期格式问题的办法

    4种解决json日期格式问题的办法   开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下 ...

  5. 解决json日期格式问题的3种方法

    这篇文章主要介绍了解决json日期格式问题的3种方法 ,需要的朋友可以参考下 开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后 ...

  6. JavaScript校验图片格式及大小

    <!DOCTYPE html> <html> <head> <title>JavaScript校验图片格式及大小</title> <s ...

  7. json日期格式问题的办法

    //json日期转换 格式(2015-01-01) <input class="easyui-datebox" name="sbdj_txtShebaoka_Lin ...

  8. JOSN学习总结<二> JSON的格式与语法

    今晚又下班早!!嘿嘿,继续JOSN的总结吧!!!!有人说这么简单还有必要写吗???我觉得“眼里过十遍不如手里过一遍”!!有错误之处请指正!!共同学习下!!!!废话不说了,进入今晚的正题: <二& ...

  9. JS对象与json字符串格式

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

随机推荐

  1. VB查询数据库之写入数据库——机房收费系统总结(三)

    在机房收费系统中,新注册的用户,更改的密码,上机下级记录,上机收费记录等等都要写入数据库,这样,后面的查询才能生效.像数据库中写入数据,首先,找到你要写入数据的数据库中的表,在表中建立新的行,让后再把 ...

  2. hdu 5592 ZYB's Premutation (权值线段树)

    最近在线段树的世界里遨游,什么都能用线段树做,这不又一道权值线段树了么. ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  3. 关于Mysort实验的补发博客

    关于本次课后的一些话 关于这次课上的关于sort -nk 2 -t: sort.txt的实验没能在课上做出,有自身的知识不够,没能灵活运用所学知识,以及在当时课上走了会神,回过头来已经不知道该干些什么 ...

  4. mac下使用github 上传代码

    提起github相信大家都不会陌生,在这里就不再赘述了.作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你经常维护自己的技术博客和github,相信你给他的印 ...

  5. LookupError: unknown encoding: cp65001

    在CMD下解释运行python时出现LookupError: unknown encoding: cp65001错误(编码错误) 在cmd下chcp命令(大概是change codepage?)可查看 ...

  6. (原)未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值与DATEADD

    SQLServer2014,查询分析器中 这样的脚本是没有问题的:AND TPO.CREATEON <= DATEADD(DAY, 1, '2017/3/3 0:00:00') 但.NET  D ...

  7. iOS:时间格式化(标准时间转为时间戳、时间戳转为标准时间、时间戳转为日期)

    新建一个NSString(Time)分类,创建类方法实现时间的转换 .h文件 #import <Foundation/Foundation.h> @interface NSString ( ...

  8. Git系列二之数据管理

    1.Git基本管理 git常用的基本操作 1.1提交数据 我们可以简单的把工作目录理解成是一个被Git服务程序管理的目录,Git会时刻的追踪目录内文件的改动,另外在安装好了Git服务程序后,默认就会创 ...

  9. MFC【17-1】线程和线程同步化

    17.1线程 对于Windows来说所有的线程都是一样的,但MFC却把线程区分为两种类型:User Interface(UI) threads(用户界面(UI)线程)和Worker threads(工 ...

  10. 高性能WEB开发:Javascript自身执行效率

    Javascript中的作用域链.闭包.原型继承.eval等特性,在提供各种神奇功能的同时也带来了各种效率问题,用之不慎就会导致执行效率低下. 1.全局导入 我们在编码过程中多多少少会使用到一些全局变 ...