zoukankan      html  css  js  c++  java
  • 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());
  • 相关阅读:
    一个JAVA数据库连接池实现源码
    PL/SQL Developer去掉启动时自动弹出的Logon弹出框方法
    解决tomcat启动Socket监听端口死循环被hold问题
    JavaMelody应用监控使用指南
    ha456.jar打开dump文件报Unsupported major.minor version 51.0异常
    分布式并行数据库将在OLTP 领域促进去“Oracle”
    Oracle查找全表扫描的SQL语句
    Oracle 11g RAC客户端使用SCAN IP无法连接问题
    Oracle存储过程执行update语句不报错不生效问题
    Oracle外键不加索引会引起死锁问题
  • 原文地址:https://www.cnblogs.com/imlions/p/3124347.html
Copyright © 2011-2022 走看看