js讀Json,JSON與字符串轉化,Java讀JSON

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就行瞭……

摘自 漂泊小柒的專欄

發佈留言