JSON数据格式介绍

JSON数据格式介绍

 

前言:本文主要内容是来自json官网中文翻译:http://www.json.org/json-zh.html。只是在后面加入了自己对于json数据格式的理解,其实官网里面介绍的很清楚,只是我们没有深入理解json格式。等我们发现自己对于json理解有偏差时,再过来看官网,发现官网上其实写的很清楚,只是我们没有注意而已。本文就是记录官网上记录的内容,但是看官很可能在第一眼浏览时可能会忽略的内容,让大家少走一些弯路。

 

JSON(JavaScript Object Notation)是一种轻量级(LightWeight)的数据交换工具;易于编写和阅读,同时也易于机器解析和生成;是基于JavaScript的一个子集。JSON采用完成独立于语言的文本语言,但是也使用了类似于C语言家族的习惯(包括CC++C#JavaJavaScriptPerlPython),这些优良的特性使得JSON成为理想的交换语言。

准确的说,上面这段话选自http://www.json.org/json-zh.html。根据不同的语言,对于这种键值(key/value)类型对集合,可以被理解为对象(Object)、记录(Record)、结构体(Struct)、字典(Dictionary)、哈希表(Hash Table)、有键列表(keyed List)、关联数组(Associative Array);另外值得有序列表(Ordered),被理解为数组(Array)

JSON具有以下形式:

对象是一个无序的键/值对的集合,该对象以左括号{开始,以右括号}结束。每个键后跟冒号:,对每个键值对之间使用逗号,分割。注意,这些符号全部是英文符号。

 

 

 


看个json的常用实例:

 

{
  "name": "刘德华", 
  "birth": "1961-09-27", 
  "wife": "朱丽倩", 
  "height": "174cm", 
  "weight": "63kg"
}

 

 

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

 

 

看个数组的json格式数据:

 

[
  "http://www.baidu.com", 
  "http://www.taobao.com", 
  "http://www.sogou.com", 
  "http://www.tencent.com", 
  "http://www.alibaba.com"
]
 

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

 

 

既然可以嵌套,数组里面当然也可以是json数据了,这个像是递归定义了。

 

[
  {
    "name": "刘德华", 
    "birth": "1961-09-27", 
    "height": "174cm", 
    "weight": "63kg"
  }, 
  {
    "name": "林志玲", 
    "birth": "1974-11-29", 
    "height": "174cm", 
    "weight": "52kg"
  }
]
 

既然数组里面支持json格式,那么json数据里面可定也可以用数组了。

 

{
    "ent": [
        {
            "name": "刘德华",
            "birth": "1961-09-27",
            "height": "174cm",
            "weight": "63kg"
        },
        {
            "name": "林志玲",
            "birth": "1974-11-29",
            "height": "174cm",
            "weight": "52kg"
        }
    ]
}
 

 

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

 

字符串(string)与C或者Java的字符串非常相似。

 

 

 

字符串的定义一定要注意编码问题

 

 

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

 

 

 

根据json的递归定义,前面定义的格式几乎是json数据的全部数据格式了,大家可以仔细看下上面提到的实例。

 

下面列下常用的Json解析包: 

 

Java

json-simple:这个是常用的Json解析包,目前项目中用的就是这个,好用。 代码见这里:http://code.google.com/p/json-simple/

fastjson:alibaba出品,看评测报告性能性能优异,暂时还没有使用。 代码可以参考:http://sourceforge.net/projects/fastjson/

google-gson:Google出品,还没有用过,不过google出的东西应该不会太差,用过的人可以说两句。http://code.google.com/p/google-gson/

XStream:没错,就是XStream。使用XStream序列化对象,但是还没有用过的XStreamJSon解析功能,写在这里纯粹是个眼熟。 http://xstream.codehaus.org/json-tutorial.html,看官方教程是JSON格式和Object的转换。

 

 

Python

simplejson:这个在Python中比较好用,相关链接见这里: http://pypi.python.org/pypi/simplejson/,如果感觉安装麻烦的话,可以把simplejson源码放到你的项目目录下,就可以直接使用。

 

 

JavaScript

json2.js:在js中使用json,不过我在js中通过ajax请求,可以直接获得json格式,然后直接使用json数据,这个没有看细节,应该是ajax中本来就引用了json的解析方式,链接可以见这里: https://github.com/douglascrockford/JSON-js

 

 

php

php本身安装包提供了json_encodejson_decode函数,这两个函数比较好用,要注意的是字符编码问题,这个问题在网络上有一堆的答案,大家可以仔细看下。

Zend_JSONzend_json提供了常用的json解析功能,另外还提供了一个好用的prettyPrint函数,这个对于调试还是比较有用的。两外还有xmljson格式的转换、json-server提供json格式的请求和响应,注意这个是Zend_Json_Server,提供RPC服务,细节可以见这里:http://framework.zend.com/manual/1.12/en/zend.json.html

 

 

 

json这种数据格式可是大大方便了程序员处理数据的简明性,记得在某篇文章中看到,json数据格式已经定义了所有需要的元素,在未来没有再扩展的必要。这句话就目前来看,确实很正确。深入理解一下json数据还是很有必要的。

猜你喜欢

转载自isilic.iteye.com/blog/1747660