JSON使用講解

前端操做json

 .JSON字符串JSON對象的區別

     1. 一個對象以「{」  開始,     「}」結束。   每一個名稱後跟一個「:」(冒號);「‘名稱/之間運用 「,」(逗號)分隔。 名稱用引號括起來;值若是是字符串則必須用括號,數值型則不需要。例如:前端

      var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"}java

    2. 數組是值(value)的有序集合。一個數組以「[」開始,    「]」 結束。值之間運用 「,」(逗號)分隔。git

爲了方便地處理JSON數據,JSON提供了json.js包,下載地址:http://www.json.org/json.js通常如今用json2.jsajax

    JSON對象是直接可使用JQuery操做的格式,和js中的對象同樣,能夠用對象(類名)點出屬性(方法)。json

JSON字符串僅僅只是一個字符串,一個總體,不截取的話沒辦法取出其中存儲的數據,不能直接使用,除非你只想alert()後端

    在數據傳輸流程中,json是以文本,即字符串的形式傳遞的,而JS操做的是JSON對象,因此,JSON對象和JSON字符串之間的相互轉換是關鍵。例如:數組

JSON字符串:安全

    var str1 = '{ "name": "cxh", "sex": "man" }';ide

JSON對象:函數

var str2 = { "name": "cxh", "sex": "man" };

JavaScript 對象表示法(字面量表示法)。

var book = {};   //建立一個沒有屬性的對象

var book = {

   name : "The Definitive Guide",

   "main title" : "JavaScript",      //當屬性名中間有空格,或者"-"時,要用引號把屬性名括起來

   author : {                          //對象的屬性也能夠是對象

      firstname : "Rex",

      lastname : "Mai

   }

};

看起來都是key-value的鍵值對,很像js的對象吧?沒錯,但同時JSON表示不服,我不能跟js的對象長成同樣啊,我得有我本身的個性,因而規定鍵-值對中的鍵必須用雙引號!同時規定鍵-值對中的值的取值有必定要求:

JSON 值能夠是:

數字(整數或浮點數)

字符串(在雙引號中)

邏輯值(true false

數組(在方括號中)

對象(在花括號中)

null

.JSON字符串轉換爲JSON對象

JSON字符串轉換爲JSON對象

Eval()

eval() 的參數是一個字符串。若是字符串表示了一個表達式,eval() 會對錶達式求值。若是參數表示了一個或多個 JavaScript 聲明, 那麼 eval() 會執行聲明。

var jsonStr = '{"name": "hanzichi", "sex": "male"}';js自帶的方法

var ans = eval('(' + jsonStr + ')');

console.log(ans.name, ans.sex); // hanzichi male

eval 函數很是快,可是它能夠編譯任何 javascirpt 代碼,這樣的話就可能產生安全的問題。eval 的使用是基於傳入的代碼參數是可靠的假設下,有一些狀況下,可能客戶端是不可信任的。若是基於安全的考慮的話,最好是使用一個JSON解析器(json2.js),一個JSON 解析器將只接受JSON文本,因此是更安全的,以下。

parse(str)

  JSON.parsejson字符串 -> json對象)

var jsonStr = '{"name": "hanzichi", "sex": "male"}';

var obj = JSON.parse(jsonStr);

console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}

parseJSON()

 var obj = jQuery.parseJSON('{"name":"John"}');

alert( obj.name === "John" );//JSON字符串轉換爲JSON對象jQuery插件支持的轉換方式 

 而後,就能夠這樣讀取:

Alert(obj.name);

傳入一個畸形的JSON字符串會拋出一個異常。好比下面的都是畸形的JSON字符串:

{test: 1} test 沒有包圍雙引號)

{'test': 1} (使用了單引號而不是雙引號)

另外,若是你什麼都不傳入,或者一個空字符串、nullundefinedparseJSON都會返回 null

注意:若是obj原本就是一個JSON對象,那麼運用 eval()函數轉換後(哪怕是屢次轉換)仍是JSON對象,可是運用 parseJSON()函數處理後會有疑問(拋出語法異常)。

三.JSON對象轉化爲JSON字符串。

stringify(obj);

JSON.stringifyjson對象 -> json字符串)

var obj = {name: 'hanzichi', sex: 'male', age: '10'};

var jsonStr = JSON.stringify(obj);

console.log(jsonStr);  // {"name":"hanzichi","sex":"male","age":"10"}

四.讀取JSON對象的方法

var str2 = { "name": "haorooms", "sex": "man" };

就能夠這樣讀取:

alert(str2.name);

//彈出」 haorooms」

咱們遇到的JSON不多有這麼簡單的,好比複雜一點的JSON對象如:

var str={"GetUserPostByIdResult":{"Age":"33","ID":"2server","Name":"haorooms"}};

解析用:

alert(str.GetUserPostByIdResult.Name); //彈出haorooms

後端操做Json

Gson對象

Gson有2個最基本的方法
1) toJson() – 轉換java 對象到JSON
2) fromJson() – 轉換JSON到java對象

HashMap<String, Object> map=new Gson().fromJson(resultJson, HashMap.class);轉換爲map類型

new Gson().toJson(user).toString()轉化爲json

向前臺發送json字符串

@ResponseBody

public String phoneyanzheng(HttpServletRequest request,HttpServletResponse response)  {

         Map<String, Object> map = new HashMap<String, Object>();

         map.put("msg", info);info爲後臺返回的信息

return new Gson().toJson(map);

}

$.ajax({

type : "POST",

dataType: "json",

url : "${ctx}/bbs/login/getCode",

data : $("#userform").serialize(),//userform爲表單id

success : function(result) {

alert(result.msg)

}

JSONObject對象

 要引入"net.sf.json"

JSONObjectnew Gson()前者側重於存取後者側重於轉換

JSONObject obj = new JSONObject(resultJson);轉化爲json

JSONObject o=(JSONObject) obj.get("data");//獲取

String info=o.getString("errCode");

JSONObject和JSONArray的區別

區別在於JSONObject是一個{}包裹起來的一個對象(Object)
JSONArray則是[]包裹起來的一個數組(Array)

JSONArray中添加JSONObject對象。發現JSONArrayJSONObject的區別就是JSONArrayJSONObject多中括號[]

jsonObj:{"name0":"zhangsan","sex1":"female"}

jsonArray:[{"name":"xuwei","sex":"male"}]

相關文章
相關標籤/搜索