JSON.stringify() 这个方法可以把javascript对象转换成json字符串。

JSON.parse() 这个方法可以把 json 字符串转换成 javascript对象。

【下面来看一下这两个方法的详细解答】

json数据中没有变量和结尾的分号,并且数据必须是用双引号引起来的,单引号会报语法错误。

json的数据格式:

{
"name":"chef",
"child":{
"name1":"children",
"age1":[
"one",
"two",
"three"
],
"hello":"world"
},
"age":33
}

JSON.stringify()

  把一段 javascript 对象序列化为 json 字符串忽略缩进与空格,并可以把单引号给你改成双引号,此方法还可以传入第二个参数,这第二个参数可以是一个数组,也可以是一个函数。如果是数组,那么数组元素一定要与javascript对象中的键相匹配(键值对的键)

如果是一个数组,那么表示序列化这个数组元素相对应的javascript对象的键值对

// 此对象贯穿全文
var js = {
"name":"chef",
"child":{
"name1":"children",
"age1":[
"one",
"two",
"three"
],
"hello":"world"
},
"age":33
} // 把 javascript对象序列化为 json 字符串忽略缩进与空格
var js_json = JSON.stringify(js); console.log(js_json); //{"name":"chef","child":{"name":"children","age":["one","two","three"],"hello":"world"},"age":33} //序列化选项传入数组
var js_option = JSON.stringify(js,["child","age"]); //只序列化了指定的 键 :child age
console.log(js_option); //{"child":{"age":["one","two","three"]},"age":33}

还可以传入一个函数,这个函数有两个参数,即(key,value)被序列化的json字符串的键值对,可以在函数的内部改变这些value

//序列化选项 传入一个函数
var js_fn = JSON.stringify(js,function(key,value){
switch(key){
case "age1":
//把age1的值用逗号分隔成字符串
return value.join(","); case "name1":
//把原来的值替换掉
return "直接把原来的值修改了"; case "hello":
//删除该键值对
return undefined; //没有default这句获取不到数据
default:
return value;
}
}); console.log("传入函数的结果:"+js_fn);
//传入函数的结果:{"name":"chef","child":{"name1":"直接把原来的值修改了","age1":"one,two,three"},"age":33}

  

  还可以传入第三个参数,(第二个参数不传可以写null) 第三个参数是控制json字符串缩进的,它是个数字或字符串,数字最多缩进10,如果传入的大于10则自动转化为10,如果传入的是字符串,则用这个字符串当做缩进符来代替空格

//传入第三个参数控制字符串缩进
var js_indent = JSON.stringify(js,null,4); console.log("缩进后的json字符串:"+js_indent);
/*
浏览器执行效果:
缩进后的json字符串:{
"name": "chef",
"child": {
"name1": "children",
"age1": [
"one",
"two",
"three"
],
"hello": "world"
},
"age": 33
}
*/

toJSON()

  定义在javascript对象中,当序列化javascript对象的时候,会先调用toJSON方法然后序列化toJSON返回的值,如果toJSON方法return undefined,那么这个javascript对象的值就是undefined,如果包含toJSON方法的对象被嵌入在其他的对象里,那么包含toJSON方法的对象的值会变为null

var js_tojson = {
name:'chef',
age:'22', //在javascript对象中这样定义 toJSON 方法
toJSON:function(){ return {name:this.name,age:this.age};
}
}; //调用stringify()方法序列化对象
var tojsonText = JSON.stringify(js_tojson); console.log("调用 toJSON 的结果:"+tojsonText) //调用 toJSON 的结果:{"name":"chef","age":"22"}

【序列化的顺序是先检查 javascript对象中是否有 toJSON方法,如果有那么先执行toJSON方法,返回什么就序列化什么】

stringify()参数的执行顺序:
  1,第一个参数
  2,检查toJSON并执行
  3,第二个参数
  4,第三个参数

JSON.parse()

把一段json字符串解析为原生javascript值 如果传给parse()的不是有效的json字符串,这个方法会抛出错误

// 把 json 字符串解析为原生javascript值
var json_js = JSON.parse(js_json); console.log(json_js); // Object {name: "chef", child: Object, age: 33}

parse()方法也有第二个参数,可以给它传一个函数,这个函数同样有两个值,(key,value)这个函数的功能跟 stringify()的第二个函数的功能一样

    //==== perse() 的第二个参数
var perse_fn = {
name:"chef",
age:66,
newDate: new Date()
} //先把perse_fn对象转换成json字符串
var perse_json = JSON.stringify(perse_fn); //再把json字符串转为javascript对象
var perse_js = JSON.parse(perse_json,function(key,value){
switch(key){
case "name": //可以改变 value
return value+"大厨的笔记"; case "newDate": //返回时间对象
return new Date(); // 这个 default 必须有,不然就 undefined 了,
default:
return value;
}
}); console.log(perse_js);//Object {name: "chef大厨的笔记", age: 66, newDate: Thu Nov 10 2016 22:52:20 GMT+0800 (中国标准时间)}

以上就是本人对 json 的总结。

JSON.stringify() / JSON.parse()的更多相关文章

  1. JSON.stringify(),JSON.parse(),toJSON()使用方法总结

    今天在看<你不知道的javascript-中>第四章‘强制类型转换’的时候,发现JSON.stringify(),JSON.parse(),toJSON()有很多细节,自己也就总结测试了一 ...

  2. JSON.stringify(),JSON.parse(),toJSON()方法使用

    JSON.stringify(),将value(Object,Array,String,Number...)序列化为JSON字符串    JSON.parse(), 将JSON数据解析为js原生值   ...

  3. JSON stringify and parse

    来源 : http://javascript.ruanyifeng.com/stdlib/date.html //解析json也可以传入一个方法, 基本上和stringify差不多,不过是逆序的, 要 ...

  4. JSON.stringify(),JSON.parse(),eval(string)

      JSON.stringify()用于从一个对象解析出字符串 : var obj = {"name":"week","age":" ...

  5. JSON.stringify & JSON.parse 简析

    以前用到JSON的场景也不少,但是没有仔细的研究过,这几天趁着一个需求用到了,就整理了一下相关用法. 一. JSON.stringify() 1. 语法  JSON.stringify(value[, ...

  6. JSON.stringify,JSON.parse方法

    var obj={name:'zhangsan',age:'18'};/** js对象--->JSON字符串* JSON.stringify(js对象) --转化为--> JSON字符串* ...

  7. 解决IE6 IE7 JSON.stringify JSON 未定义问题

    在项目中引入json2.js 官方http://www.json.org/ 源码地址:https://github.com/douglascrockford/JSON-js $.ajax({ url: ...

  8. JSON.parse() 和 JSON.stringify()

    JSON.parse()和JSON.stringify()   1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf& ...

  9. JSON.parse()与JSON.stringify()高级用法

    JSON.parse()与JSON.stringify是将JSON对象与字符串互相转换的方法,它们还有一些参数可以让我们在实际应用中更加方便,现在介绍一下它们的高级用法 JSON.parse() JS ...

随机推荐

  1. C# 访问数据库

    1. 首先引用和生命system.data.sqlClient 2. 使用sqlconnect类链接,sqlcommand类执行SQL命令,最后结果返回给sqlDataReader类或者是其他类 3. ...

  2. HSF和Dubbo有什么区别

    一. 以下摘录自企业级分布式应用服务EDAS官网段落 RPC服务 提供对Dubbo和HSF两个RPC框架的支持.阿里巴巴第一代RPC框架Dubbo是国内第一款成熟的商用级RPC框架,已于2011年正式 ...

  3. 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束

    简要分析: 要求三个线程轮流输出,这里我们要使用一个对象锁,让关键部分的代码放入同步块当中.同时要有一个变量记录打印的次数到达10次循环后不再打印,另外一个就是要给每个线程一个标志号,我们根据标识号来 ...

  4. SHLVL 和 BASH_SUBSHELL 两个变量的区别

    SHLVL 是记录多个 Bash 进程实例嵌套深度的累加器,而 BASH_SUBSHELL 是记录一个 Bash 进程实例中多个子 Shell(subshell)嵌套深度的累加器. 看不懂上面这句话不 ...

  5. Shader 学习笔记

    Shader "Custom/Diffuse Texture" { // Shader的开始,双引号内饰该Shader的名字 Properties { _MainTex (&quo ...

  6. FireBug提示:本页面不包含 JavaScript,明明是包含js的。

    本页面不包含 JavaScript 如果 <script> 标签有 "type" 属性, 其值应为 "text/javascript" 或者 &qu ...

  7. LYDSY模拟赛day1 String Master

    /* 暴力枚举两个后缀,计算最长能匹配多少前缀. 最优策略一定是贪心改掉前 k 个失配的字符. 时间复杂度 O(n3). */ #include<cstdio> ],b[]; int ma ...

  8. Android高手速成--第一部分 个性化控件(View)

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  9. Node.js与Express4安装与配置

    Nodejs简介 Node.js 基于 Chrome JavaScript 运行环境,用于便捷地搭建快速.可扩展的网络应用. 它使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效, 非常适合 ...

  10. window下安装zookeeper

    本地zookeeper安装(win7)下载zookeeper-3.3.6.zip文件解压zookeeper-3.3.6.zip文件到d:盘在D:\zookeeper-3.3.6\conf下增添 zoo ...