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的使用・小结相关推荐

  1. python转json的函数_python将字符串转换成json的方法小结

    最近在工作中遇到了一个小问题,如果要将字符串型的数据转换成dict类型,我第一时间就想到了使用json函数.但是里面出现了一些问题 1.通过json来转换: In [1]: import json I ...

  2. C# 中对于json的解析小结

    1.解析之前的json格式 [{"Name": "冯111","PID": "130627199202283306",& ...

  3. 关于json对象的使用小结!

    json是前后端数据交互的关键.后端提供的接口中的数据几乎都是通过json来表现的,所以,需要对这个json做一些小结: 这里要推进谷歌的插件Fehelp前端助手,这个可以清楚的看到json的数据: ...

  4. Newtonsoft.Json.dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  5. jasonencode php_PHP的json_encode()函数与JSON对象

    一.问题描述 这周搬砖的时候,前端通过ajax获取后端的数据后,照例用 对象.属性 的方式取值,然而结果总是总是不能如预期般展示在页面上. 先写个 demo 还原下场景:选中一个下拉框列表选项后,会在 ...

  6. C# Socket编程(5)使用TCP Socket

    TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer) ...

  7. 【译】gRPC vs HTTP APIs

    本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者 Edison Zhou. 现在,ASP.NET Core使开发人员可以构建gRPC服务.gRPC是 ...

  8. python接口自动化(十六)--参数关联接口后传(详解)

    简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操 ...

  9. python入门经典代码-Python入门经典

    Python入门经典 学习编程 为什么使用Python 如何使用本书 如果遇到困难怎么办 为什么要学习Python 本书的目标读者 本书的组织结构 读者反馈 读者服务 献辞 1 安装和运行Python ...

最新文章

  1. IOS,十六进制颜色和RGB颜色的宏定义
  2. 消息队列之延时消息应用解析及实践
  3. Android设计模式之——模板方法模式
  4. 【git】----- clone 及上传文件
  5. 点到直线的距离c语言程序,点到线段的距离 题解(C++)
  6. [ACM] hdu 2082 找单词 (母函数)
  7. Leetcode之删除链表的倒数第N个节点
  8. ThinkingInJava 学习 之 0000001 一切都是对象
  9. 印象笔记Markdown样式美化
  10. 流体力学专业常用网站集合
  11. python爬取搜狗微信的推文
  12. Bitset 源码解析
  13. 基于天问block编译环境下ASRPRO语音芯片程序编写教程(二)语音识别,GPIO输入输出,PWM输出篇
  14. 办公自动化系统OA学习要点
  15. 大一学生关心的问题(一)
  16. Python实践-咚咚呛讲师Python进阶教程
  17. csv文件和excel文件
  18. MySql性能测试工具-sysbench
  19. 华为云DGC数据治理方法论
  20. 数据库的查找操作(题)

热门文章

  1. 前端 在浏览器端存储数据
  2. Deconvolution与Upsampling的区别
  3. 【NOIP 模拟赛】钟 模拟+链表
  4. 洛谷 P1255 数楼梯 70
  5. iOS-生成国际化包-配置App多语言支持
  6. Android之Activity的四种启动模式
  7. SQlite-数据库的访问实例(转)
  8. [Android学习系列8]数据库ormlite笔记
  9. SQL语句更改表所有者
  10. Linux下Mysql的基本操作