您的位置:时时app平台注册网站 > web前端 > JSON简介以及用法汇总彩世界网址

JSON简介以及用法汇总彩世界网址

2019-09-14 00:46

什么是JSON?

JavaScript 对象表示法(JavaScript Object Notation)。

JSON是一种轻量级的数据沟通格式,有个别JSON格式的文书之中譬喻可以长成那样:

JavaScript

{ "name": "hanzichi", "sex": "male" }

1
2
3
4
{
  "name": "hanzichi",
  "sex": "male"
}

看起来都是key-value的键值对,很像js的目的啊?没有错,但与此同不日常候JSON表示不服,笔者无法跟js的靶子长成一样啊,小编得有作者本人的秉性,于是规定键-值对中的键必需用双引号!同不时间明确键-值对中的值的取值有相对须要:

JSON 值能够是:

  1. 数字(整数或浮点数)
  2. 字符串(在双引号中
  3. 逻辑值(true 或 false)
  4. 数组(在方括号中)
  5. 目的(在花括号中)
  6. null

除以上6种外,再无任何,未有像js一样的undefined、NAN,JSON拒绝使用。

总结

自然轶事中的ie8(及以下)因为某种缺欠不能够利用JSON.parse()以及JSON.stringify()方法,而eval()又呈现不安全,假如要合作它们的话能够援引json2.js。

 

来源

什么利用JSON?

JSON一般以字符串的款型在数量交互进程中游走,so对于js来说,怎么着将json字符串和js对象时期张开互动调换显得特别主要。

  • eval大法(json字符串 -> js对象)

JavaScript

var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var ans = eval('('

  • jsonStr ')'); console.log(ans.name, ans.sex); // hanzichi male
1
2
3
var jsonStr = '{"name": "hanzichi", "sex": "male"}';
var ans = eval('(' jsonStr ')');
console.log(ans.name, ans.sex); // hanzichi male

eval 函数比不慢,然而它能够编写翻译任何 javascirpt 代码,那样的话就恐怕发生安全的题目。eval 的应用是基于传入的代码参数是有限补助的比方下,有局地动静下,可能客商端是不可靠的。假设依照安全的设想的话,最佳是利用一个JSON剖析器,一个JSON 剖判器将只接受JSON文本,所以是更安全的,如下。

  • JSON.parse(json字符串 -> js对象)

JavaScript

var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var obj = JSON.parse(jsonStr); console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}

1
2
3
var jsonStr = '{"name": "hanzichi", "sex": "male"}';
var obj = JSON.parse(jsonStr);
console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}

第二个参数能够是函数,能够对值举办删改:

JavaScript

var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}'; var obj = JSON.parse(jsonStr, function(key, value) { if(key === 'name') { return 'my name is ' value; } return value; }); console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10}

1
2
3
4
5
6
7
8
var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}';
var obj = JSON.parse(jsonStr, function(key, value) {
  if(key === 'name') {
    return 'my name is ' value;
  }
  return value;
});
console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10}
  • JSON.stringify(js对象 -> json字符串)

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"name":"hanzichi","sex":"male","age":"10"}

1
2
3
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr);  // {"name":"hanzichi","sex":"male","age":"10"}

也足以加个参数,规定须求中间转播为json字符串的品质(数组方式,跟数组同名的js对象属性才会被改换):

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, ['name']); console.log(jsonStr); // {"name":"hanzichi"}

1
2
3
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, ['name']);
console.log(jsonStr);  // {"name":"hanzichi"}

其次个参数也足以是个函数,可以删选符合条件的质量(也许更换属性值,没有return表示放任该属性,return的值表示该key在json字符串中的值)

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, function(key, value) { if(key === 'name') { return 'my name is ' value; } return value; }); console.log(jsonStr); // {"name":"my name is hanzichi","sex":"male","age":"10"}

1
2
3
4
5
6
7
8
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, function(key, value) {
  if(key === 'name') {
    return 'my name is ' value;
  }
  return value;
});
console.log(jsonStr);  // {"name":"my name is hanzichi","sex":"male","age":"10"}

还足以有第多少个参数,能够是数字可能字符串。

若是若数字来讲,表示缩进,数字大小抢先10了按10甩卖。

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 4); console.log(jsonStr); // { // "name": "hanzichi", // "sex": "male", // "age": "10" // }

1
2
3
4
5
6
7
8
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, null, 4);
console.log(jsonStr);
// {
//     "name": "hanzichi",
//     "sex": "male",
//     "age": "10"
// }

也得以是字符串,会在品质前增加那一个字符串充当前缀,一样字符串长度超越10只截取10:

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 'pre'); console.log(jsonStr); // { // pre"name": "hanzichi", // pre"sex": "male", // pre"age": "10" // }

1
2
3
4
5
6
7
8
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, null, 'pre');
console.log(jsonStr);
// {
// pre"name": "hanzichi",
// pre"sex": "male",
// pre"age": "10"
// }

那边小编有个疑问,笔者感觉输出应该是之类情势才对啊…

JavaScript

{ "prename": "hanzichi", "presex": "male", "preage": "10" }

1
2
3
4
5
{
"prename": "hanzichi",
"presex": "male",
"preage": "10"
}

劳动有驾驭的大大能倾情告诉作者…

什么是JSON?

JavaScript 对象表示法(JavaScript Object Notation)。

JSON是一种轻量级的数据沟通格式,某些JSON格式的公文之中比如能够长成那样:

{   "name": "hanzichi",   "sex": "male" }

看起来都以key-value的键值对,很像js的靶子呢?没有错,但相同的时候JSON表示不服,小编不可能跟js的指标长成一样啊,作者得有小编自身的个性,于是规定键-值对中的键非得用双引号!同一时候规定键-值对中的值的取值有必然供给:

JSON 值能够是:

  1. 数字(整数或浮点数)
  2. 字符串(在双引号中
  3. 逻辑值(true 或 false)
  4. 数组(在方括号中)
  5. 对象(在花括号中)
  6. null

除上述6种外,再无其余,未有像js同样的undefined、NAN,JSON拒绝使用。

 总结

当然故事中的ie8(及以下)因为某种破绽不可能动用JSON.parse()以及JSON.stringify()方法,而eval()又展现不安全,假使要同盟它们的话可以援引json2.js。

1 赞 1 收藏 1 评论

彩世界网址 1

如何利用JSON?

JSON一般以字符串的款型在数据交互进度中游走,so对于js来讲,如何将json字符串和js对象之间开展交互调换显得愈发关键。

  • eval大法(json字符串 -> js对象)

    var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var ans = eval('(' jsonStr ')'); console.log(ans.name, ans.sex); // hanzichi male

eval 函数一点也十分的快,然而它能够编写翻译任何 javascirpt 代码,那样的话就恐怕发生安全的主题素材。eval 的选拔是依照传入的代码参数是可相信的假使下,有部分景况下,恐怕顾客端是不可靠赖的。假若依照安全的设想的话,最棒是接纳一个JSON深入分析器,一个JSON 剖析器将只接受JSON文本,所以是更安全的,如下。

  • JSON.parse(json字符串 -> js对象)

    var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var obj = JSON.parse(jsonStr); console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}

第四个参数能够是函数,可以对值实行删改:

var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}'; var obj = JSON.parse(jsonStr, function(key, value) {   if(key === 'name') {     return 'my name is '   value;   }   return value; }); console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10}
  • JSON.stringify(js对象 -> json字符串)

    var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"name":"hanzichi","sex":"male","age":"10"}

也得以加个参数,规定须求转接为json字符串的属性(数组格局,跟数组同名的js对象属性才会被撤换):

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, ['name']); console.log(jsonStr);  // {"name":"hanzichi"}

其次个参数也得以是个函数,能够删选符合条件的质量(可能转移属性值,未有return表示摒弃该属性,return的值表示该key在json字符串中的值)

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, function(key, value) {   if(key === 'name') {     return 'my name is '   value;   }   return value; }); console.log(jsonStr);  // {"name":"my name is hanzichi","sex":"male","age":"10"}

还足以有第多少个参数,能够是数字或许字符串。

万一是数字来讲,表示缩进,数字大小超越10了按10管理。

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 4); console.log(jsonStr);   // { //     "name": "hanzichi", //     "sex": "male", //     "age": "10" // }

也足以是字符串,会在性质前拉长那一个字符串充当前缀,一样字符串长度超过10只截取10:

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 'pre'); console.log(jsonStr);   // { // pre"name": "hanzichi", // pre"sex": "male", // pre"age": "10" // }

那边自个儿有个问号,小编感觉输出应该是之类格局才对啊…

{ "prename": "hanzichi", "presex": "male", "preage": "10" }

麻烦有知情的大大能倾情告诉作者…

JSON简要介绍以及用法汇总

2015/03/26 · JavaScript · 1 评论 · JSON

初稿出处: 韩非子迟的博客   

本文由时时app平台注册网站发布于web前端,转载请注明出处:JSON简介以及用法汇总彩世界网址

关键词: