JSON是一种轻量级的数据交换格式,全称——JavaScript 对象表示法(JavaScript Object Notation)。

  类比XML,你可以把JSON看作是一种存储数据的格式类型,一种数据规范。

  描述JSON格式数据的语法采用了JS对象字面量的表示方法,但是你不能的把JS对象就看做是JSON了,同XML一样JSON只是一种存储数据的类型,它是独立于语言存在的,只是在不同的编程语言中对这种数据类型的实现不同,例如在JavaScript中使用JavaScript对象对这种数据格式进行实现,那么在java中当然是用java对象实现。

  同时,既然JSON这种数据格式用JS对象字面量的表示方法进行描述,那么描述JSON的语法就是JS对象字面量表示法语法的一个子集。如下图所示:

                    

  下面我们看一下js对象的字面量表示法,及JSON格式的数据是怎么用这种语法实现的。 

<script type="text/javascript">
    //这是一个js对象,属性不加"",符合js对象的字面量表示法语法但不符合JSON语法。
var jsObj1 = {
name : "张三"
}
    //这是一个内部带有方法js对象,虽然属性加了"",但JSON的语法中属性的值不能是方法。
var jsObj2 = {
"name" : "张三",
"func" : function(){
alert("hello");
}
}
    //这是一个符合JSON数据格式的js对象,是JavaScript语言中对JSON这种数据格式的实现形式,也是我们常说的"JSON对象"。
    //这种JS对象字面量的表示方法,也就是"JSON对于其数据形式规范的语法",所以说"JSON的语法就是JS对象字面量表示法语法的一个子集"。
var jsonObj = {
"name" : "张三",
"age" : 10,
       "remark" :{ "high" : 170 ,"address" : "beijinghaidian" }
       
} </script>

  其实对于"js对象的字面量表示法"中属性加不加引号是"js对象"还是"JSON对象的说法本身就是错误的,加与不加引号它都是"js对象",只是你加了引号以后,从语法上来说符合JSON的语法规则,而JSON的语法规则又是"js对象的字面量表示法"语法规则的子集,所以无论怎么表示,他都是一个"js对象"。那么有没有属性必须要加引号的情况呢?我们知道js对于变量的命名规则是数字、字母、下划线及$符号,属性不加引号时也符合这个规则,但要是属性中有这四种之外其它的符号如"[" 或者 "."等等,属性就必须引号来表示。

  

  说到底,JSON是一种数据格式,一种对于数据的规范,因为其居有自我描述性及简洁的语法规则,让它成为了一种在不同语言之间理想的数据交换的格式,JSON独立于语言而存在,任何站在语言的角度及对象层面对他的解释都是有局限性或者是错误的。

  参考文章:

    (1):http://www.json.org.cn/index.htm

    (2):http://www.w3school.com.cn/json/json_syntax.asp

  最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

  

  

  

JSON(一)——JSON与JavaScript的关系的更多相关文章

  1. javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())

    javascript 数组和对象的浅度复制和深度复制在平常我们用 ‘=’来用一个变量引用一个数组或对象,这里是‘引用’而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3,' ...

  2. 支持Json进行操作的Javascript类库TAFFY DB

    前段时间工作中用到Json数据,希望将一些简单的增删改查放到客户端来做,这样也能减少服务器端的压力.分别查找了几个可以对Json进行操作的javascript 类库,最终选定了TAFFY DB.原因如 ...

  3. JSON概述及其在JavaScript与Java中的应用(整理)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成. 官网:http://json.org/ ...

  4. JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格

    JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的.简洁和清晰的层次结构使得 JSON 成为理想的数据交换 ...

  5. C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化

    所谓的序列化其实就是把一个内存中的对象信息转化成一个可以持久化保存的形式,方便保存数据库和文件或着用于传输, 序列化的主要作用是不同平台之间进行通信与信息的传递保存等,常用的有序列化有Json Xml ...

  6. 8.7 JSON存储数据方式(JavaScript对象表示法)

    8.7 JSON存储数据方式(JavaScript对象表示法) JSON JavaScript 对象表示法(JavaScript Object Notation) 是一种存储数据的方式. 一.创建JS ...

  7. javascript中json对象json数组json字符串互转及取值

    今天用到了json数组和json对象和json类型字符串之间互转及取值,记录一下: 1.json类型的字符串转换为json对象及取值 var jsonString = '{"bar" ...

  8. Json 查看Json的插件

    # 写写写写写,每个人有每个人写东西的方式,这些都是好的方式.需要感谢的人有几个,对我的成长有启发,所以我也会把能够想到.接触到的东西告诉team里面的人.新人,然后这些人又可以把这些东西传递给下一波 ...

  9. json 字符串 <----> json 对象

    一,字符串 -->JSON对象 1,转换函数 JSON.parse(json_str): 2,$.parseJSON(json_str):  用的是 jquery 的插件  所以需要引入 jq. ...

  10. .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程

    JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...

随机推荐

  1. 防F12审查元素扒代码:按下F12关闭当前页面

    有的时候我看别人的网站的某个部分做的比较好我都会通过按F12审查元素来查看别人的代码,那么如果不然别人查看自己网站的代码呢.一段JavaScript代码即可实现上述功能,插入到footer.php或者 ...

  2. python笔记之异常

    异常 內建异常在exceptions模块内,使用dir函数列出模块的内容. 自定义异常类:继承基类Exception. 异常可以使用raise语句引发,可以使用try ... except ... e ...

  3. 研华ADAM 6000系列型号枚举值

    public enum Adam6000Type    {        Non = 0,        Adam6015 = 6015,        Adam6017 = 6017,        ...

  4. 深入解读 Js 中的面向对象编程

    前言:今天看了一篇文章觉得很不错,所以给大家分享一下,也许很多人都看过面向对象编程甚至写过这样博客,觉得面向对象编程就那样,没啥好说的,那可能是因为你对这方面知识已经了解,可以选择性跳过.那如果有更通 ...

  5. c++ --> 重载、重写(覆盖)和隐藏的区别

    重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...

  6. ES6 中 Promise 详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...

  7. 四十六、android中的Bitmap

    四十六.android中的Bitmap: http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html 四十七.实现调用Android ...

  8. java中equals与==的区别

    http://blog.csdn.net/zfrong/article/details/4290904

  9. Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能

    Dynamics 365 for CRM 提供了Sitemap站点图的可视化编辑功能 在之前的所有版本中,我们只能通过从系统中导出站点图的XML进行编辑后再导入(容易出错),或使用第三方的Sitema ...

  10. Python+reuqests自动化接口测试

    1.最近自己在摸索Python+reuqests自动化接口测试,要实现某个功能,首先自己得有清晰的逻辑思路!这样效率才会很快! 思路--1.通过python读取Excel中的接口用例,2.通过pyth ...