网站:http://json.org/
javascript中定义的一个对象,就是一种最简单的json格式
如:
var s={'a':'123','b':false,'c':undefined,'d':123,'e':null};
var arr=['a','b','c','d',false];
json is not a document format json不是一种文档格式。
json is not a markup language。 json不是一种标记语言
json is not a general serialization format. json不是一种通用的可序列化的格式。
-No cyclical/recurring structures. 没有循环的结构
-No invisible structures. 没有不可见的元素
-No functions 没有函数
任何的xml数据都可以用json表示出来。
xml | json |
|
var s=[{username:"zhangsan",password:"123",age:20,address:"xi\'an",gender:"male"},{username:"zhangsan",password:"123",age:20,address:"xi\'an",gender:"fmale"}];
alert(s[0].address); |
可以是: 整型、实型、科学技术法。
没有八进制,没有十六进制
没有NaN(Not a Number)且没有infinity(无限大 eg:6/0)------可以使用null代替这NaN和infinity。
由0或者多个unicode字符组成。
没有”字符”类型,一个字符被表示为一个长度为1 的字符串。
用双引号 "" 括起来
可以用反斜杠 \ 进行转义
什么都不是的一个值
Object are unordered containers of key/value pairs.
对象就是一个键/值对儿无序的容器。
对象被花括号 { } 包裹
, separates key /value pairs 各个键和值对儿用逗号分隔
: separates keys and values 键和值用 冒号分隔
keys are strings 键是字符串
values are JSON values 值时JSON值类型
-struct ,record,hashtable,object 表示结构,记录,hash表,对象
Arrays are ordered sequences of values . 数组是一个有序的值得集合。
Arrays are wrapped in []. 数组被方括号包裹起来。
, separates values . 用逗号分隔各个值
JSON does not talk about indexing. JSON并不会跟索引打交道。
-An implementation can start array indexing at 0 or 1.
javascript通过索引获取数组值
var s=[
[1,2,3],
[4,5,6],
[7,8,9]
];
alert(s[0][2]);//3
application/json
在servlet中 response.setContentType("application/json");,到浏览器端时浏览器就会把数据当做json格式对待。
Strictly UNICODE. 严格的unicode编码
Default:UTF-8. 默认utf-8编码
UTF-16 and UTF-32 are allowed. utf-16和utf-32也是可以的
A JSON decoder must accept all wellformed JSON text.
json解码器必须接受格式良好的json文本。
A JSON decoder may also accept non-JSON text.
json解码器可能接受非json文本(对于有些解码器来说,如果接收非json格式文本就会抛异常)。
A JSON encoder must only produce well-formed JSON text.
一个json编码器必须可以生成格式良好的json文本。
ajax 是异步的JavaScript和xml。
而json 的出现,代替了xml。
而ajax人们已经叫习惯了,不好改成ajajson
-Obtain responseText 获得响应文本
-Parse the responseText 解析响应文本
responseData = eval('('+responseText+')');//javascript原生处理
responseData = resonseText.parseJSON();//jquery提供
The ability to represent the most general computer science data strutures,records,list,and trees.
json可以表示计算机科学领域大多数的数据结构。如记录,列表,树。
JSON Doesn’t have namespaces. json没有命名空间,每个对象都是一个命名空间。
var s={};//s就是一个命名空间
JSON has no validator. json没有校验器。
JSON is not extensible. json是不可扩展到的
JSON IS NOT XML. json不是xml
xml | json |
<section> <title>Book-Signing Eventtitle> <signing> <author title="Mr" name="Vikram Seth"/> <book title="A Suitable Boy" price="$22.95" /> signing> <signing> <author title="Dr" name="Oliver Sacks"/> <book title="The Island of the Color-Blind" price="$12.95" /> signing> section> |
var s={"section": {"title":"Book-Signing Event", "signing":[ { "author":{"title":"Mr","name":"Vikram Seth"}, "book":{"title":"A Suitable Boy","price":"$22.95"} },{ "author":{"title":"Dr","name":"Oliver Sacks"}, "book":{"title":"The Island of the Color-Blind","price":"$12.95"} } ] } }; alert(s.section.signing[0].author.title); |
XML is not a good data interchange format,but it is a document standard.
XML并不是一个理想的数据交换格式(传输的数据量太大,太复杂),但是它是一个文档标准.
During the Browser War,innovation was driven by the browser makers.
在浏览器大战时代,进步创新是浏览器厂商决定的。
In the Ajax Age,innvation is being driven by application developers.
在ajax时代,变革是由应用开发则驱动的。
The browser makers are falling behind.
浏览器厂商被甩在后面了。
如果不是firefox的变革思想,IE可能还停留在IE6时代。
使用org.json在java语言中处理json
import org.json.JSONArray; import org.json.JSONObject; public class Test { public static void main(String[] args) { //json对象 String jsonContent="{'name':'zhangsan','age':20}"; JSONObject jsonObject=new JSONObject(jsonContent); String nameV=jsonObject.getString("name"); int ageV=jsonObject.getInt("age"); System.out.println(nameV); System.out.println(ageV); System.out.println("-----------------------------"); //json数组 jsonContent="[{'hello':333, 'abc':false, 'xyz':{'a':1, 'b':'ab'}},{'hello':555, 'abc':true, 'xyz':{'a':3, 'b':'ba'}}]"; JSONArray jsonArray=new JSONArray(jsonContent); for(int i=0;i){ JSONObject jsonObj=jsonArray.getJSONObject(i); int value1=jsonObj.getInt("hello"); boolean value2=jsonObj.getBoolean("abc"); JSONObject jsonObj2=jsonObj.getJSONObject("xyz"); int value3=jsonObj2.getInt("a"); String value4=jsonObj2.getString("b"); System.out.println(value1); System.out.println(value2); System.out.println(value3); System.out.println(value4); } } } /* zhangsan 20 ----------------------------- 333 false 1 ab 555 true 3 ba */
http://code.google.com/p/google-gson/
A Java library to convert JSON to Java objects and vice-versa
一个java库,可以将JSON转换成java对象,反之亦然。
english | 中文 |
Gson is a Java library that can be used to convert Java Object into their JSON representation . it can also be used to convert a JSON string to an equivalent Java object . Gson can work with arbitary Java objects including pre-existing objects that you do not have source-code of. There are a few open-source projects that can convert Java objects to JSON,Howerer,most of them request that you place JAVA annotations in your classes something that you can not do if you do not have access to the source-code. Most also do not fully support the use of Java Generics. Gson considers both of these as very import design goals. Gson Goals Provide simple toJson() and fromJson() methods to convert Java object to JSON and vice-versa Allow pre-existing unmodifiable objects to be converted to and from JSON Extensive support of Java Generics Allow custom representations for objects Support arbitraily complex objects (with deep inheritance hierarchies and extensive use of generic types) |
Gson是一个java库,可以用于将java对象转换成它的JSON表现形式。它也可以用于将JSON字符串转换成与之对应的Java对象。Gson可以和任意的Java对象搭配使用,包括已经存在的你没法得到源代码的对象。 有一些开源的项目可以将java对象转换成JSON,然而,这些项目大多数需要拟在class中放置注解(注解特点: 必须拥有源代码才能加注解),如果你没有办法获取源代码时就无能为力了。 大多数没有完全支持的Java范型。Gson考虑到这两点的重要性,并将这两点作为主要的设计目标。 Gson 目标 提供简单的方法 toJson() 和 fromJson()来将java对象转换成JSON,反之亦然。 允许已经存在的,不能被修改的对象被转换成JSON。(不修改原有类的源代码就可以把他们转换成JSON) 提供对java泛型强大的支持。 允许对象的客户化的表现形式。 支持任意复杂的对象(即使是有很深层次的继承,以及大量使用了泛型类别的对象都可以处理) |
一个解析json的库叫 json-path,百度的云推送提供的java服务器sdk中就在使用 json-path
http://www.oschina.net/code/snippet_273576_34427
开始做,坚持做,重复做