1.JS讀JSON
書寫AJAX的時候,經常需要解析從伺服器返回的一串字串,這裡簡單介紹伺服器返回字元的兩種格式,及JS對它們的解析方法。
JSON即JS對象標記(JavaScript Object Notation),是一種以JS聲明對象的方式組合的一串字串。
JS可以按以下方式定義對象:
var obj =
{
id: 2,
name: 'n'
};
alert(obj.name);
這樣就定義了對象 obj, 它有兩個公用屬性id和name,可以用 obj.id 的方式直接存取其屬性值。
從伺服器擷取資料時往往不止一個對象,這就需要用到對象數組,JS中對象數組可以用 [] 來定義,如下:
var objs = [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}];
alert(objs[0].id);
這樣就定義了對象數組 objs, 它包含兩個對象,可以用索引來訪問,如 objs[0] 將引用到第一個對象。到這裡你或許已經想到伺服器返回的字串格式是怎樣的,但字串畢竟是字串,我們需要將其轉換為可以利用JS操作的變數。這就用到 eval 函數,請看下例:
var objs = eval("[{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}]");
alert(objs[0].id); // return 1
好了,伺服器端你只要以格式:[{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}] 返回字串,在用戶端就可以利用 eval() 執行返回的字串,獲得對象數組。以下用AJAX做一個簡單的例子。用js取json的代碼如下:
var objs = eval(request.responseText);
alert(objs.length); // 2
alert(objs[0].id); // 1
alert(objs[1].name);// 'n_2'
再添加一個測試按鈕即可以看到效果:
<input type="button" value="GetJson" onclick="getJson();" />
但有時,會遇到Json資料是自己拼接的情況,用js直接讀,發現讀出來的資料都是undefined...也就是說,像
var s = "{name1:'name1',name2:'name2'}";的情況,js是把它當作字串,而不是JSON資料來處理的。所以,需要我們把它轉化為JSON形資料。
注意,如果此時寫:tmp = eval(tmp) 則會報"缺少;"的錯誤。應該是:tmp =eval("(" + tmp + ")");
然後再使用document.getElementById("txt1").value = tmp.name1;就可以了。
另有字串轉化為JSON的方法: //需要json.js包
var obj = strJSON.parseJSON();
var obj = JSON.parse(strJSON);
JSON轉化為字串:
var str = obj.toJSONString();
var str = JSON.stringify(obj)
2.Java讀取JSON資料:
import java.io.*;
import org.json.*;
public class Demo {
public static void main(String[] args) throws Exception {
String str = "{\"a\":\"b\", \"c\":\"d\"}";
JSONObject a = new JSONObject(str);
System.out.println(a); // {"c":"d","a":"b"}
System.out.println(a.get("c")); // d
}
}
直接把字串作為參數交給JSONObject就行了……
摘自 漂泊小柒的專欄