以前对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"}

这是最简单的一种格式,访问时,我们可以

json1["id"] //1 ,不可以使用下标访问 json1[0] 错误,因为不是数组

json1.name //zhangsan

2.嵌套格式

var json2 = {

                    "id": 1,

                "name": "zhangsan",

                "address": { "address1": "地址1", "address2": "地址2" }

            };

这种定义是json(数据格式或对象)里面嵌套一个json(数据格式或对象),当然可以嵌套多个,这里只是举一个例子。我们在访问时 可以

json2["id"] //1

json2.address.address1 //地址1

json2.address["address1"] //地址1

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());  //返回json

原创文章,转载请注明: 转载自沉默的小丑

本文链接地址: Json数据使用及学习方法

Json数据使用及学习方法的更多相关文章

  1. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  2. 利用Python进行数据分析(2) 尝试处理一份JSON数据并生成条形图

    一.JSON 数据准备 首先准备一份 JSON 数据,这份数据共有 3560 条内容,每条内容结构如下: 本示例主要是以 tz(timezone 时区) 这一字段的值,分析这份数据里时区的分布情况. ...

  3. Salesforce Apex 使用JSON数据的示例程序

    本文介绍了一个在Salesforce Apex中使用JSON数据的示例程序, 该示例程序由以下几部分组成: 1) Album.cls, 定了了封装相关字段的数据Model类 2) RestClient ...

  4. MVC使用ajax异步刷新时怎样输出从后台中传过来的JSON数据

    前言 这几天在学习MVC使用AJAX异步刷,因为是新手.所以在js中传参数到后台以及后台返回数据到前台怎么接受,怎么前台遍历出JSON数据都开始不知道,相信新手在使用时跟我一样会遇到,这里我就和大家分 ...

  5. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  6. jQuey知识点三 解析json数据

    1.解析简单数据 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="vie ...

  7. JSON数据的使用

    JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON ...

  8. ajax获取json数据 for select2

    json数据“a.json” [ { "id": "1", "text": "张三" }, { "id&quo ...

  9. Web API返回JSON数据

    对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...

随机推荐

  1. 缓冲区溢出利用与ShellCode编写

    一.实验目的 熟悉编写shellCode的流程 掌握缓冲区溢出的利用 二.实验环境 系统环境:Windows环境 软件环境:C++ ,缓冲区溢出文件链接 三.实验原理 要实施一次有效的缓冲区溢出攻击, ...

  2. js 手动实现 promise.all的功能

    在中高级面试中,实现一个promise.all是一个频率较高的面试题 首先分析下 promise.all(),(参考MDN) 接收一个promise的iterable类型(注:Array,Map,Se ...

  3. BIBD&SBIBD的矩阵题

    证明不存在 \(01\) 方阵 \(A\) 使得: \(A^TA=\begin{pmatrix}7&2&\dots &2\\2&7&\dots&2\\ ...

  4. iostream 操作符

    iostream 操作符 Input/output manipulators - cppreference.com

  5. pycharm中的terminal和Windows命令提示符有什么区别?二者用pip安装的包是不是位于相同位置?

    那要看pycharm使用了什么shell,可以在设置->工具->终端里查看shell path.如果使用的是cmd.exe那就没区别.pycharm终端和Windows命令提示符用pip安 ...

  6. 【技术博客】Flutter—使用网络请求的页面搭建流程、State生命周期、一些组件的应用

    Flutter-使用网络请求的页面搭建流程.State生命周期.一些组件的应用 使用网络请求的页面搭建流程 ​ 在开发APP时,我们常常会遇到如下场景:进入一个页面后,要先进行网络调用,然后使用调用返 ...

  7. UltraSoft - Beta - Scrum Meeting 5

    Date: May 21st, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 修复了课程通知链接的bug Liuzh 前端 暂无 Kkkk 前端 增加消息中心板 ...

  8. GeoServer-Manager应用:java编码实现发布矢量数据或栅格数据至GeoServer

    目录 简介与下载 依赖 编码发布矢量数据 编码发布栅格数据 简介与下载 GeoServer-Manager是使用Java编写的面向GeoServer的客户端库,通过GeoServer的REST管理接口 ...

  9. 15个问题自查你真的了解java编译优化吗?

    摘要:为什么C++的编译速度会比java慢很多?二者运行程序的速度差异在哪? 了解了java的早期和晚期过程,就能理解这个问题了. 本文分享自华为云社区<你真的了解java编译优化吗?15个问题 ...

  10. 对JavaScript中局部变量、全局变量和闭包的理解

    对js中局部变量.全局变量和闭包的理解 局部变量 对于局部变量,js给出的定义是这样的:在 JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域 ...