有关json的一些理解

JSON (JavaScript Object Notation)预研

1.    问题

1.1    什么是JSON?

1.2 在什么地方可以用到JSON?

1.3 JSON有什么作用?

1.4 JSON相关的键值对主要表现形式是什么?

1.5 JSON的格式是怎样的?

1.6 用户使用JSON时有哪些优缺点?

1.7 使用JSON和使用XML相比较,JSON的优缺点主要表现在哪里?

2.技术预研

2.1概念

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

2.2用法

2.2.1具体形式

(1)对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

(2)数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

(3)值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

(4)字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串(string)与C或者Java的字符串非常相似。

(5)数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

2.2.2创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它如:

 Var people={"programmers":[{"firstName":"Brett", "lastName":"McLaughlin", "email": "aaaa" },

      { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

        { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

           ],

                      "authors": [

                       { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

        { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

                       { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

                        ],

                       "musicians": [

  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

                        { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

] }

2.2.3访问数据

people.programmers[0].lastName; // Value is " McLaughlin "

 people.authors[1].genre // Value is "fantasy"

 people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one

people.programmers[2].firstName // Value is "Elliotte"

2.2.4修改 JSON 数据

正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:

  people.musicians[1].lastName = "Rachmaninov";

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

 

 

有关字符串与JSON的有关浏览器中转换的方法:在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。JSON.stringify(obj)将JSON转为字符串。JSON.parse(string)将字符串转为JSON格式;

2.2.5字符串转换JSON 对象

(1)可以在IE6、IE7、火狐(firefox)、360、google chrome、搜狗高速等浏览器中都可以用eval()将字符串转换为JSON对象或JSON.parse(string)将字符串转为JSON格式;这种形式;

如:1)  <scripttype="text/javascript">

             var c = '({ "name": "Mike", "sex": "?", "age": "29" })';

             var b = eval(c);

             alert(b.name);

</script>

2)   <script type="text/javascript">

              var c = '{ "name": "Mike", "sex": "?", "age": "29" }';

              var b = eval("("+c+")");

              alert(b.name);

</script>

  3)  <scripttype="text/javascript">

              var c = '{ "name": "Mike", "sex": "?", "age": "29" }';

              var b = JSON.parse(b);

              alert(b.name);

</script>

 

输出结果是:

 

 

 

2.2.6 JSON 对象转换字符串

如:    <script type="text/javascript">

 var people ={

"programmers":[{ "firstName": "Brett", "lastname": "Mclaughlin", "Email": "aaa" },

                       {"firstName":"Jason", "lastname":"Hunter", "Email":"bbb" },

                       {"firstName":"Elliotte", "lastname":"Harold", "Email":"ccc" }],

            "authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],

            "musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

                 ]}

 

        var strPeople = JSON.stringify(people);

        alert(strPeople);

  </script>

输入的结果是:

2.3基础结构

2.3.1“名称/值”对的集合(A collection of name/value pairs)。

不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(deyed list),或者关联数组(assocative array)。

2.3.2值的有序列表(An ordered list of values)。

大部分语言中,它被理解为数组(array)。

2.4 基础示例

JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

2.4.1表示名称 / 值对

  按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":

{ "firstName": "Brett" }

当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

2.4.2表示数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对,那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。

  如果使用 JSON,就只需将多个带花括号的记录分组在一起:

  { "people": [

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},

  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

  ]}

在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

  { "programmers": [

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }

  ],

  "authors": [

  { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

  { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

  ],

  "musicians": [

  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

  { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

  ] }

 

2.5 JSON优缺点

2.5.1优点

(1)数据格式比较简单,易于读写,格式都是压缩的,占用带宽小。

(2)易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的读取

(3)作为一种数据传输格式,JSON 与 XML 很相似,但是它更加灵巧。

(4 )JSON不需要从服务器端发送含有特定内容类型的首部信息。

支持多种语言,

2.5.2缺点

(1)语法过于严谨

(2)码不易读

(3)eval 函数存在风险

2.5.3JSON和 XML 优缺点的比较

 (1)   在可读性方面,JSON和XML的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。

(2)   在可扩展性方面,XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

(3) 在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

(4)  在解码难度方面,XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

(5)  在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。

(6)  JSON和XML同样拥有丰富的解析手段。

(7)  JSON相对于XML来讲,数据的体积小。

(8)    JSON与JavaScript的交互更加方便。

(9)  JSON对数据的描述性比XML较差。

(10) JSON的速度要远远快于XML

2.6代码

<script type="text/javascript">

        var people = { "programmers": [{ "firstName": "Brett", "lastname": "Mclaughlin", "Email": "aaa" },

        { "firstName": "Jason", "lastname": "Hunter", "Email": "bbb" },

        { "firstName": "Elliotte", "lastname": "Harold", "Email": "ccc" }

        ],

        "authors": [

  { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

  { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }

  ],

 "musicians": [

  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },

  { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }

       ]

      }

      document.write(people.programmers[0].lastname);

</script>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值