Json數據使用及學習方法


以前對json的了解並不是很清楚,因為使用很少,所以也沒有特意的研究。只知道json是輕量級的數據交換格式,可以被多種語言方便的處理,也是大型門戶站接口使用的主要數據格式。

而最近做了個項目,涉及到json數據的操作。發現json其實挺簡單。

本文是自己在開發過程中對json的理解及使用,有錯誤的地方,也請大家多多指正。

在學習處理json數據之前,需要對js中的數組和靜態對象的定義了解一下。

js中數組的定義

//定義1維數組,包含三個元素
var arr = new Array(“1″, “2″, “3″);
//或
var arr2 = ["1","2","3"]; //以[]定義數組
//取值時
arr[0],arr[1],arr[2] //”1″,”2″,”3″ 對應的值.
//js的數組比較特殊,數組中的元素可以包含各種類型的元素。
如var arr3 = [["1","2","3"],”zhangsan”,2]; //arr3[0] 是數組,arr3[1]是字符型 arr3[2]是整形

類似於c#中
var arr = new object[3] {new object[3]{“1″,”2″,”3″}, “zhangsan”,2};

//我們可以很容易的使用js這種特性來定義數據類型。如下
var arr4 = [["zhangsan",18,"男"],["lisi",20,"男"],["wangwu",22,"女"]]; //二維數組
//如果需要使用數組中的元素,可以使用數組的下標。訪問也很方便。
arr4[0][0]; //zhangsan arr4[1][0] //lisi
但是只能使用下標訪問。如果數據嵌套的太多,就涉及到多維數據,理解起來會非常的麻煩。

js中靜態對象的定義

var PeopleInfo =
{
     id: "1",  //換成"id"也是一樣的
     name: "zhangsan",
     ShowName: function () {
          console.log(PeopleInfo.name);
     }
};

定義了一個靜態對象PeopleInfo,包括屬性值id,name,方法ShowName。
我們在使用時

訪問屬性:PeopleInfo.id,PeopleInfo.name
訪問方法:PeopleInfo.ShowName()

類似於c# 中的靜態類。

到這里js中的數組和靜態對象講完了。下面就開始本文的重點json

json是一種對象,也是一種數據格式,json的格式如下

1.基本格式

var json1={"id":1,"name":"zhangsan"}

2.嵌套格式

var json2 = {
                    "id": 1,
                "name": "zhangsan",
                "address": { "address1": "地址1", "address2": "地址2" }
            };

3.數組嵌套格式

var json3 = {
                "id": 1,
                "name": "zhangsan",
                "address": [{ "address1": "地址1"}, {"address2": "地址2" }]
            };

這種定義是json里包含一個數組,而數組里又包含兩個json。訪問為嵌套的元素時,與上述說明相同,訪問嵌套元素時可以
json3.address[0].address1 //地址1
json3.address[0]["address1"] //地址2

我們在訪問json格式的數據時,只需要記住,如果是數組要用下標,如果是對象,可以用變量名也可以用屬性

我們所遇到的json數據,無非是上述三種。也許遇到的會更復雜一下。如下:

var JsonObject = {
    "person1": {
        "id": 1,
        "name": "zhangsan",
        "address": { "address1": "北京1", "address2": "北京2"}
    },
    "person2": {
        "id": 2,
        "name": "lisi",
        "address": { "address1": "上海1", "address2": "上海2" }
    }
};

但是只要明白數組和對象的定義,分析起來也很容易,無非就是數據格式之間的嵌套。
對象JsonObject包含兩個對象person1,person2,person1與person2的結構相同,並分別包括兩個變量id,name和一個address對象。訪問時,只需按層次訪問就可以。例如
JsonObject["person1"]["address"]["address1"] //北京1

如果需要遍歷,遍歷json數據格式的方式如下:

function JsonLoop(json) {
    for (var key in json) {
        if (json.hasOwnProperty(key)) {
            if (typeof json[key]=="object") {
                JsonLoop(json[key]);
            }else {
                console.log("key:" + key + ", val:" + json[key]);
            }
        }
    }
}
//調用方式
JsoanLoop(JsonObject);

在.net中默認不支持json數據格式的讀寫,如果我們需要操作這種數據格式,可以分開來處理。
1.ajax中用json數據格式傳遞,ashx中接收,並作為參數處理,返回值為text類型。如

$.ajax({
    url: "ajax/jsontest.ashx",
    data: {"id":1,"name":"zhangsan"},  //json數據格式
    type: 'POST',
    success: function (data) { alert(data); }
});

ashx使用的代碼,可以直接通過變量名來接收

int id = int.Parse(context.Request.Form["id"]);
string name = context.Request.Form["name"];
context.Response.Write(string.Format("id={0},name={1}",id,name));

2.asp.net操作json數據
vs2012支持json的序列號和反序列化,但是之前的版本並不支持。所以我從google中搜索到Net.Json類(開源)。可以方便的操作json數據。
下載地址:http://sourceforge.net/projects/csjson/?source=dlp

Net.Json使用如下:

function TestJsonAjax() {
    $.ajax({
        url: "ajax/jsontest.ashx",
        data: {"id":1},     //json數據格式
        dataType: 'json',   //設置數據類型
        type: 'POST',
        success: function (data) { JsonLoop(data); },   //調用遍歷函數
        error: function (data,error){alert(error+":"+data)}
    });
}

然后在ashx中接收id,並返回josn數據類型。

context.Response.ContentType = "application/json";
            int id = int.Parse(context.Request.Form["id"]);
            JsonObjectCollection jsonObject = new JsonObjectCollection();
            jsonObject.Add(new JsonStringValue("name","zhangsan"));
            jsonObject.Add(new JsonObjectCollection("address",
                                                    new JsonObject[3]
                                                        {
                                                            new JsonStringValue("address1", "北京1"),
                                                            new JsonStringValue("address2", "北京2"),
                                                            new JsonStringValue("address3", "北京3")
                                                        }));
            context.Response.Write(jsonObject.ToString());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM