JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON建构于两种结构:“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。 这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式:
1.对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
2.数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
(以上部分摘自:http://www.json.org/json-zh.html)
JSON有如下几点好处:
1. 简单格式化的数据交换
2.易于人们的读写习惯
3.易于机器的分析和运行 。
2.易于人们的读写习惯
3.易于机器的分析和运行 。
JSON与XML的比较:
1.可读性:JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
2.可扩展性:XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
3.编码难度:XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
4.解码难度:XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
ADOBE关于JSON的应用有个json包,它提供两个接口decode和encode,前者相当于一个解压json数据的过程,后者相当于一个压缩数据成json格式的过程。下面给出例子:
package
{
import flash.display.Sprite;
import flash.events.Event;
import json.*;
/**
* ...
* @author Never
*/
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
var infoJSON:String = '{"newinfo": [{ "news1": "never1", "news2": "never", "news3": "never3" },{ "news1": "never4", "news2": "never5", "news3": "never6" }]}'
//使用方法1 decode:
var _myJson:Object = new Object();
_myJson = JSON.decode(infoJSON);
trace(_myJson.newinfo[0].news1);//输出:never1;
trace(_myJson.newinfo[1].news2)//输出:never5;
//使用方法2 encode:
var _myOb:Object = new Object();
_myOb.id = "007";
_myOb.name = "Never";
trace(JSON.encode(_myOb));//输出:{"id":"007","name":"Never"}
removeEventListener(Event.ADDED_TO_STAGE, init);
}
}
}
{
import flash.display.Sprite;
import flash.events.Event;
import json.*;
/**
* ...
* @author Never
*/
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
var infoJSON:String = '{"newinfo": [{ "news1": "never1", "news2": "never", "news3": "never3" },{ "news1": "never4", "news2": "never5", "news3": "never6" }]}'
//使用方法1 decode:
var _myJson:Object = new Object();
_myJson = JSON.decode(infoJSON);
trace(_myJson.newinfo[0].news1);//输出:never1;
trace(_myJson.newinfo[1].news2)//输出:never5;
//使用方法2 encode:
var _myOb:Object = new Object();
_myOb.id = "007";
_myOb.name = "Never";
trace(JSON.encode(_myOb));//输出:{"id":"007","name":"Never"}
removeEventListener(Event.ADDED_TO_STAGE, init);
}
}
}
转载于:https://blog.51cto.com/neveras/255510