什么是Json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,可替换XML成为AJAX程序中的数据交换格式。

它有两种结构:
  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object)纪录(record)结构(struct)字典(dictionary)哈希表(hash table)有键列表(keyed list),或者关联数组 (associative array)
  2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

JSON是JavaScript的子集,我们在JavaScript中可以很容易的使用它。

下面是官方网站上面提供的一个例子:

  
  
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
}
;

这个例子中,创建了一个对象,它只包含一个成员“bindings”。“bindings”中有一个包含了3个对象的数组,而这每个对象都有"ircEvent""method""regex"3个成员。

myJSONObject.bindings[ 0 ].method 的值是 " newURI "


JSON官方网站提供的一个开源的JSON解析器和字符串转换器:json.js

string.parseJSON() 解析函数,它将JSON文本解析成object或者array,可以抛出一个语法错误的异常;
array.toJSONString(),
boolean.toJSONString() ,
date.toJSONString(),
number.toJSONString(),     
object.toJSONString(),
string.toJSONString(): 这几个函数可以生成JSON文本

下面写一个简单的解析和转换的例子:

var str = '[ " 0 " , " 1 " ]';
var obj = str.parseJSON();
document.write(obj[
0 ]);
document.write(obj[
1 ]);

结果是01

var doc = new Array();
doc[
0 ] = ' 0 ';
doc[
1 ] = ' 1 ';
document.write(doc.toJSONString())

结果是["0","1"]


资源
官方网站:http://www.json.org
JSON解析和转换器下载:http://www.json.org/json.js

PHP 5.2.0 新版本中默认支持一个新的 JSON extension,实现了两个函数 json_decode() 和 json_encode(),前者可以将 JSON 格式的字符串还原为 PHP native 的数组和常规对象,而后者则可以将 PHP native 的数组和常规对象编码为 JSON 格式的字符串。

------------------------------------

下面这些看得不是太明白``有高手路过的话`指点一下```

如果偶研究出来的话``在这里公布下应用说明`````````

----------------------------------

在 JSON 中我们已经介绍过其基本格式,与XML相同,JSON只是一个文字格式,只要客户端与伺服端可以剖析它,就可以利用它作为传送资料的格式,但它是JavaScript的核心特性之一,所以在JavaScript中使用JSON作为资料格式很方便,您还可以在 http://www.json.org 找到处理JSON的程式库,包括客户端JavaScript library与伺服端的library。

相较于XML,JSON在资料表示时更为简洁,例如一个表示帐户的资料,XML中可能如下表示:

<account>

     <number>123456</number>

     <name>Justin</name>

     <balance>1000</balance>

</account>

而使用JSON可以这么表示:

var account = {

     number : "123456",

     name: "Justin",

     balance: "1000"

};

您可以下载 http://www.json.org/json.js ,并将之加入至网页之中:

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

json.js 中有JSON parser与JSON stringifier,例如它扩充了物件,增加了toJSONString()函式,您可以直接如下传回物件的JSON表示法:

function Account(number, name, balance) {

     this.number = number;

     this.name = name;

     this.balance = balance;

}

var account = new Account(123456, "Justin", 1000);

alert(account.toJSONString());

您可以按下 执行范例 观看结果。

您可以把JSON表示法以POST发送至伺服端,例如:


HandleJSONEx-2.js

var xmlHttp;

function createXMLHttpRequest() {

if(window.XMLHttpRequest) {

xmlHttp = new XMLHttpRequest();

}

else if(window.ActiveXObject) {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}

}

function prepareJSON() {

var number = document.getElementById("num").value;

var name").value;

var balance = document.getElementById("bal").value;

var account = new Object();

account.number = number;

account.name = name;

account.balance = balance;

return account.toJSONString();

}

function handleAccount() {

var json = prepareJSON();

var url = "JSONServlet?timeStamp" + new Date().getTime();

createXMLHttpRequest();

xmlHttp.onreadystatechange = handleStateChange;

xmlHttp.open("POST", url);

xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xmlHttp.send(json);

}

function handleStateChange() {

if(xmlHttp.readyState == 4) {

if(xmlHttp.status == 200) {

document.getElementById("response").innerHTML = xmlHttp.responseText;

}

}

}

这个程式使用者输入的帐号资讯包装为物件,并使用JSON扩充的toJSONString()将之转换为JSON格式,之后POST至伺服端,伺服端可以至   JSON in Java 下载JSON伺服端的Parser,您可以撰写以下的程式:


JSONServlet.java

package onlyfun.caterpillar;

import java.io.*;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.json.*;

public class JSONServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

public JSONServlet() {

super();

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

String json = readJSONString(request);

JSONObject jsonObject = null;

String responseText = null;

try {

jsonObject = new JSONObject(json);

responseText = "帐号 " + jsonObject.getString("number") + "<br/> 名称 "

+ jsonObject.getString("name") + "<br/> 餘额 " + jsonObject.getString("balance");

}

catch (JSONException e) {

e.printStackTrace();

}

response.setCharacterEncoding("UTF-8");

response.setContentType("text/xml");

response.getWriter().print(responseText);

}

private String readJSONString(HttpServletRequest request){

StringBuffer json = new StringBuffer();

String line = null;

try {

BufferedReader reader = request.getReader();

while((line = reader.readLine()) != null) {

json.append(line);

}

}

catch(Exception e) {

System.out.println(e.toString());

}

return json.toString();

}

}

这个Servlet剖析JSON,并将资料取出后再传回文字回应。

如果将JSON字串传回给客户端瀏览器,则可以使用eval()将之运算为一个JavaScript物件以进行操作。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值