JSON的使用・小结
JSON--JavaScript Object Notation (JavaScript对象表示法)
初始JSON的人很容易弄混对象与JSON(我也是刚刚弄清楚 ⊙﹏⊙)。
JSON是一种数据格式,经常有人说什么"把数据变成JSON对象然后@#¥……@¥"。
对象不一定是JSON格式,而JSON格式的数据(以下简称JSON数据)则一定是对象(简单的数据,如1,"ABCD"都算是JSON格式,这里暂且忽略之)
JSON格式是以key-value的形式存放数据的 如:
{"name":"Rose","age":25,"family":{"brother":"Who"} }
这当中value可以是数字,字符串,数组,甚至null,但不能为undefined,function,对象实例和变量,否则该属性会被无视掉。例:
var p = {"name":"Rose","family":undefined,"age":25,"sex":function(){} } JSON.stringify(p);//-->'{"name":"Rose","age":25}' //这里的JSON.stringify是EcmaScript5提供的,JSON是一个处理JSON数据的对象(IE8+ & 其他主流浏览器)。
JSON对象有两个方法parse()和stringify();
①JSON.parse(str)是将字符串str转换成JSON数据.如
JSON.parse('{"name":"Ray","age":18}')-->{"name":"Ray","age":18}
②JSON.stringify(json,arg2)将JSON数据序列化。
第一个参数json是JSON数据;
第二个参数是可选的,字符串数组或者函数。如果是数组的话则是只保留key值在数组中存在的属性;函数的话,则可以对灵活的对value进行修改。例:
var json = {"name":"Ray","age":18,"friends":{"id":32,favorite:"TokyoHot"}} JSON.stringify(json,["age","id"]);//这个key仅限于第一层属性,所以"id"会被无视 -->'{"age":18}'var json = {"name":"Ray","age":18} JSON.stringify(json,function(key,value){switch(key){case "name":return value.length;break;case "age":return +value + 10;break;default:return value;} }); -->'{"name":3,"age":28}'
③小拓展
通过JSON对象实现对象的深复制(因为使用了JSON对象的stringify方法,所以是有局限性的,对象中不能包含函数和对象实例)
var a = {A:4}; var b = JSON.parse(JSON.stringify(a));
字符串向JSON格式转换的过程中,字符串里不能包含某些具有特殊含义的字符,否则会转换失败.例
var str = '{"name":"NothingGo\sRight"}'; JSON.parse(str);//这里会报错。如果是用jQuery的Ajax获取JSON的话,情况相同。
blacklist整理入下:
\0,\b,\n,\f,\r,
\t,\v,\u,\v,\x
通过使用eval转换JSON格式数据的问题
因为JSON对象在低版本浏览器的普及度低,我们在将序列化的数据向JSON格式转换时没有用JSON对象,而是用eval和Function(这里就不讲它了)。
eval的使用方法
var str = '{"Name":"Ray"}'; var json = eval("(" + str + ")");
这里的问题所在就是,初学者很容易就写成如下格式
var json = eval(str);
结果就报出了令人疑惑的错误:SyntaxError: Unexpected token :
疑惑是因为左看右看str都是正确的格式啊,而冒号也没有问题。
其实真正的原因是使用者没有了解eval的执行机制。
简单的说eval就相当于直接把eval中的字符串当成javascript语句执行,再把返回值赋给前面的变量。
在js中括号括起来的部分会被强行变成表达式。即
var json = {"Name":"Ray"}
而大括号(最外层的)则被理解成包裹代码块的符号。也就是说只会执行大括号里面的内容。
这就成了 var json = "Name":"Ray";毫无疑问那个冒号会引起法错误。
转载于:https://www.cnblogs.com/TiestoRay/archive/2012/11/15/2762536.html
JSON的使用・小结相关推荐
- python转json的函数_python将字符串转换成json的方法小结
最近在工作中遇到了一个小问题,如果要将字符串型的数据转换成dict类型,我第一时间就想到了使用json函数.但是里面出现了一些问题 1.通过json来转换: In [1]: import json I ...
- C# 中对于json的解析小结
1.解析之前的json格式 [{"Name": "冯111","PID": "130627199202283306",& ...
- 关于json对象的使用小结!
json是前后端数据交互的关键.后端提供的接口中的数据几乎都是通过json来表现的,所以,需要对这个json做一些小结: 这里要推进谷歌的插件Fehelp前端助手,这个可以清楚的看到json的数据: ...
- Newtonsoft.Json.dll 反序列化JSON字符串
上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...
- jasonencode php_PHP的json_encode()函数与JSON对象
一.问题描述 这周搬砖的时候,前端通过ajax获取后端的数据后,照例用 对象.属性 的方式取值,然而结果总是总是不能如预期般展示在页面上. 先写个 demo 还原下场景:选中一个下拉框列表选项后,会在 ...
- C# Socket编程(5)使用TCP Socket
TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer) ...
- 【译】gRPC vs HTTP APIs
本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者 Edison Zhou. 现在,ASP.NET Core使开发人员可以构建gRPC服务.gRPC是 ...
- python接口自动化(十六)--参数关联接口后传(详解)
简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操 ...
- python入门经典代码-Python入门经典
Python入门经典 学习编程 为什么使用Python 如何使用本书 如果遇到困难怎么办 为什么要学习Python 本书的目标读者 本书的组织结构 读者反馈 读者服务 献辞 1 安装和运行Python ...
最新文章
- IOS,十六进制颜色和RGB颜色的宏定义
- 消息队列之延时消息应用解析及实践
- Android设计模式之——模板方法模式
- 【git】----- clone 及上传文件
- 点到直线的距离c语言程序,点到线段的距离 题解(C++)
- [ACM] hdu 2082 找单词 (母函数)
- Leetcode之删除链表的倒数第N个节点
- ThinkingInJava 学习 之 0000001 一切都是对象
- 印象笔记Markdown样式美化
- 流体力学专业常用网站集合
- python爬取搜狗微信的推文
- Bitset 源码解析
- 基于天问block编译环境下ASRPRO语音芯片程序编写教程(二)语音识别,GPIO输入输出,PWM输出篇
- 办公自动化系统OA学习要点
- 大一学生关心的问题(一)
- Python实践-咚咚呛讲师Python进阶教程
- csv文件和excel文件
- MySql性能测试工具-sysbench
- 华为云DGC数据治理方法论
- 数据库的查找操作(题)