JS 之JSON学习

JSON是一个数据交换格式,由键值对组成,通常被用来当做配置文件,这两天做一套前端笔试题(谈谈你对json的理解),于是决定来认真看一下。其实在很久之前就接触过JSON.stringify()这个方法,把json对象序列化成json字符串,最大的好处就是你可以将一个对象序列化后再alert,你会看的很清楚这个对象的内部结构,但是如果你调试时直接alert这个对象,得到的就是下图

            var val={
                0:"D",
                1:"J",
                2:"L",
                3:"others"
            }

            alert(val)                    

但是如果你序列化以后,就清楚了

alert(JSON.stringify(val))

因为在序列化以后,实际上输出的是一个字符串。当然这里序列化会有很多的限制,大家直接看下面的链接就行

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

其实最终的就是这个函数的第二个参数,是一个可选参数,可以是一个函数,也可以是一个数组

JSON.stringify(value[, replacer [, space]])

当这个参数为一个函数时,就是把要序列化JSON对象的键和值传进去,做一些处理之后,返回一个新的值,所以这个函数的参数是json对象序列化后的‘键和值’。例如:

       var val={
                0:"D",
                1:"J",
                2:"L",
                3:"others"
            }

            var json_str=JSON.stringify(val,function(key,val){
                if(key==="3"){
                    return undefined
                }
                return val;
            });
            console.log(json_str+"   " + typeof json_str);

得到的结果如上图,可见当key==="3"时,返回的是undefined,就会忽略这个键值对,而不会出现在序列化的结果中。

当然你也可以通过传入一个数组实现相同的功能,如果序列化对象中的键没有出现在数组值中,那么这个键值对就会被忽略。例:

       var val={
                0:"D",
                1:"J",
                2:"L",
                3:"others"
            }

            var json_str=JSON.stringify(val,function(key,val){
                if(key==="3"){
                    return undefined
                }
                return val;
            });
            console.log(json_str+"   " + typeof json_str);

            var json_str2=JSON.stringify(val,["0","1","2"]);
            console.log(json_str2+"   " + typeof json_str2);

可见两个达到了相同的效果。

toJSON 方法

如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为:不是那个对象被序列化,而是调用 toJSON 方法后的返回值会被序列化,例如:

var obj = {
  foo: ‘foo‘,
  toJSON: function () {
    return ‘bar‘;
  }
};
JSON.stringify(obj);      // ‘"bar"‘
JSON.stringify({x: obj}); // ‘{"x":"bar"}‘

JSON.parse 方法

很显然就是反序列化,把一个json字符串,转换成json对象

使用 JSON.stringify 结合 localStorage 的例子

一些时候,你想存储用户创建的一个对象,并且,即使在浏览器被关闭后仍能恢复该对象。下面的例子是 JSON.stringify 适用于这种情形的一个样板:

// 创建一个示例数据
var session = {
    ‘screens‘ : [],
    ‘state‘ : true
};
session.screens.push({"name":"screenA", "width":450, "height":250});
session.screens.push({"name":"screenB", "width":650, "height":350});
session.screens.push({"name":"screenC", "width":750, "height":120});
session.screens.push({"name":"screenD", "width":250, "height":60});
session.screens.push({"name":"screenE", "width":390, "height":120});
session.screens.push({"name":"screenF", "width":1240, "height":650});

// 使用 JSON.stringify 转换为 JSON 字符串
// 然后使用 localStorage 保存在 session 名称里
localStorage.setItem(‘session‘, JSON.stringify(session));

// 然后是如何转换通过 JSON.stringify 生成的字符串,该字符串以 JSON 格式保存在 localStorage 里
var restoredSession = JSON.parse(localStorage.getItem(‘session‘));

// 现在 restoredSession 包含了保存在 localStorage 里的对象
console.log(restoredSession);

参考链接:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

https://developer.mozilla.org/zh-CN/docs/Using_native_JSON#The_replacer_parameter

https://developer.mozilla.org/zh-CN/docs/JSON

时间: 2024-07-30 02:34:13

JS 之JSON学习的相关文章

node.js框架StrongLoop学习笔记(一)

node.js框架StrongLoop学习笔记(一) 本人在用node.js做手机后台,查找框架发现StrongLoop挺适合,可是却发现没有中文教程,于是在自己学习时,做一下笔记,以方便其他像我一样的人参考(本人的英语水平非常差,只能一点点试着做,并记录下来,如果大家发现问题,请通知我好更正,谢谢了!).所有操作都是在CentOS7-x64,Node.js 0.12.2下完成的. nodejs框架StrongLoop学习笔记一 安装StrongLoop 创建项目 安装数据库驱动 配置数据库连接

Knockout.Js官网学习(系列)

1.Knockout.Js官网学习(简介) 2.Knockout.Js官网学习(监控属性Observables) Knockout.Js官网学习(数组observable) 3.Knockout.Js官网学习(visible绑定) Knockout.Js官网学习(text绑定) Knockout.Js官网学习(html绑定.css绑定) Knockout.Js官网学习(style绑定.attr绑定) 4.Knockout.Js官网学习(click绑定) Knockout.Js官网学习(event

JS做深度学习1——偶然发现与入门

JS做深度学习1--偶然发现与入门 不久前,我初次涉猎了Node.js,并且使用它开发了毕业设计的WEB模块,然后通过在Node中调用系统命令执行Python文件方式实现了深度学习功能模块的对接,Python代码的介入,让JS代码显得很累赘,我说过我很爱ES6以后的JS并且很讨厌Python的代码风格,无奈,我在写毕设那会Google还没有正式发布基于JS的深度学习框架,好吧,其实我对这事已经抱怨了很久,但是我的"呼声"仿佛很快就被Google"认同了"(滑稽),就

Java和js操作json

Js中 Json字符串转json对象 //将json格式的字符串转为json对象 var t = JSON.parse('{"name":123}'); alert(t.name); json对象转json字符串 //json对象数组. //packJson 为对象数组 packJson = [ {"name":"nikita", "password":"1111"}, {"name":

JS操作JSON总结

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包.本文主要是对JS操作JSON的方法做下总结. 在JSON中,有两种结构:对象和数组. 1. 一个对象以“{”(左括号)开始,“}”(右括号)结束.每个“名称”后跟一个“:”(冒号):“‘名称/值’ 对”之间使用“,

java对象转JSON JS取JSON数据

JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new PropertyFilter() { @Override public boolean apply(Object arg0, String arg1, Object arg2) { // 过滤掉对象里的包含自己的属性(自己关联自己) if (arg1.equals("wareTypes") || arg1.equals("skillS&

js 将json字符串转换为json对象的方法解析(转)

js 将json字符串转换为json对象的方法解析 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": &

《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转换成JSON,然后传递到前台JS文件中,JS解析JSON数据,并将数据显示在界面,主要介绍两种显示方式,显示在DropDownList控件 or 显示在动态创建的Table表中.   本文主要介绍两个地方: 1.根据学年查询学期信息的实现--JS将解析的JSON数据绑定到DropDownList框

js读取json包装的map集合

后台 Map<String,Integer> map = new HashMap<>(); map.put("你好1", 1); map.put("你好2", 2); map.put("你好3", 3); map.put("你好4", 4); map.put("你好5", 5); Gson gson = new Gson(); String json = URLEncoder.enc