文章目录
  1. 1.
  2. 2. main()
    1. 2.1. 引号问题
    2. 2.2. JSON对象
  3. 3. json对象和对象字面量~
    1. 3.1. 序列化与反序列化
    2. 3.2. 字面量
    3. 3.3. 什么时候算是JSON?
  4. 4. Reference

最近看xss看到关于json的代码, 就作一个json专项笔记吧.

main()

JSON.parse();

引号问题

注意一下单引号

1
2
3
4
var code = '"\u0070\u0072\u006f\u006d\u0070\u0074\u0028\u0031\u0029"';
// code必须由单引号扩起来
JSON.parse(code); // "prompt(1)"
eval(code); // prompt(1)

JSON对象

由上面引出来一个新的问题就是如果传入一个json对象, 那么对象应该是这么写:

1
2
3
var postData = {
"name" : 1
};

而不是

1
2
3
var postData = {
'neme' : 1
};

json对象和对象字面量~

Update in 08/11/2016

汤姆大叔
JSON有非常严格的语法,在string上下文里{ "prop": "val" }是个合法的JSON,但{ prop: "val" }{ 'prop': 'val' }确实不合法的

1
2
3
4
5
//  JS对象字面量
var jsObj = {prop:"val"};

// json对象
var jsonObj = {"prop":"val"};

序列化与反序列化

复杂的数据结构经常需要用到,并且通过各种各样的中括号{},小括号(),叫括号<>和空格来组成,这个字符串仅仅是按照要求规范好的字符。

由于在js中所以一般使用的是json, 替代者有YAMLXML(甚至request params

字面量

Mozilla Developer Center
1.他们是固定的值,不是变量,让你从“字面上”理解脚本。 (Literals)
2.字符串字面量是由双引号(”)或单引号(’)包围起来的零个或多个字符组成的。(Strings Literals)
3.对象字面量是由大括号({})括起来的零个或多个对象的属性名-值对。(Object Literals)

什么时候算是JSON?

形如{ "prop": "val" }. 可能是JavaScript对象字面量也有可能是JSON字符串;
取决于什么上下文使用它;
如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串;
如果是用在对象字面量上下文中,那它就是对象字面量;

Reference

MDN-json
深入理解js-汤姆大叔

文章目录
  1. 1.
  2. 2. main()
    1. 2.1. 引号问题
    2. 2.2. JSON对象
  3. 3. json对象和对象字面量~
    1. 3.1. 序列化与反序列化
    2. 3.2. 字面量
    3. 3.3. 什么时候算是JSON?
  4. 4. Reference