JSON

什么是JSON

  JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式。

这里写图片描述

JSON格式
  • JSON对象(object):一个对象包含一系列非排序的名称/值对,以 { 开始,以 } 结束。每个名称/值对之间使用 : 分隔。
  • JSON数组(array):一个数组是一个值的集合,一个数组以 [ 开始,并以 ] 结束。值之间使用 , 分隔。

       名称是一个字符串;值可以是字符串(string),数字(number),对象(object),布尔值(bool),数组(array),null值。

{
     "firstName": "John",
     "lastName": "Smith",
     "sex": "male",
     "age": 25,
     "address": 
     {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": "10021"
     },
     "phoneNumber": 
     [
         {
           "type": "home",
           "number": "212 555-1234"
         },
         {
           "type": "fax",
           "number": "646 555-4567"
         }
     ]
 }
JSON应用

  JSON被广泛应用于WEB应用的开发。

访问JSON对象

  因为JSON 语法是 JavaScript 语法的子集,所以,在 JavaScript 中,处理JSON对象,很方便。

var myObj = { "name":"runoob", "alexa":10000, "site":null };
var x = myObj["name"]; //或者使用另一种方式:x = myObj.name;

//循环
for (x in myObj) {
    document.getElementById("demo").innerHTML += x + "<br>";
}

//嵌套JSON对象
myObj = {
    "name":"runoob",
    "alexa":10000,
    "sites": {
        "site1":"www.runoob.com",
        "site2":"m.runoob.com",
        "site3":"c.runoob.com"
    }
}
//访问嵌套的JSON对象
x = myObj.sites.site1;  // 或者 ,x = myObj.sites["site1"];

//修改值
myObj.sites.site1 = "www.google.com";

//删除对象的属性
delete myObj.sites.site1;
访问JSON数组
var test = [ "Google", "Runoob", "Taobao" ];
var result = test[0];
JSON.parse()

  JSON 通常用于与服务端交换数据。服务端传过来的数据一般是JSON字符串。
  JSON对象和JOSN字符串的区别?

//1、JSON对象
var str2 = { "name": "asan", "sex": "man" };
//2、JSON字符串
var str2 = '{ "name": "asan", "sex": "man" }';

  我们可以使用 JSON.parse() 方法将JSON字符串转换为 JavaScript 对象。

//格式
JSON.parse(text[, reviver])
//说明
text:必需, 一个有效的 JSON 字符串。
reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

  示例:使用 AJAX 从服务器请求 JSON 数据,并解析为 JavaScript 对象。

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        document.getElementById("demo").innerHTML = myObj.name;
    }
};
xmlhttp.open("GET", "/try/ajax/json_demo.txt", true);
xmlhttp.send();
JSON.stringify()

  JSON 通常用于与服务端交换数据。在向服务器发送数据时一般是字符串。
  我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

//格式
JSON.stringify(value[, replacer[, space]])
//说明
value:必需, 一个有效的 JSON 对象。
replacer:可选。用于转换结果的函数或数组。
space:可选,文本添加缩进、空格和换行符
eval()

  JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据,将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

//格式
var obj = eval ("(" + txt + ")");  //txt为JSON字符串

//示例
var txt = '{ "sites" : [' +
'{ "name":"菜鸟教程" , "url":"www.runoob.com" },' +
'{ "name":"google" , "url":"www.google.com" },' +
'{ "name":"微博" , "url":"www.weibo.com" } ]}';

var obj = eval ("(" + txt + ")");

document.getElementById("name").innerHTML=obj.sites[0].name 
document.getElementById("url").innerHTML=obj.sites[0].url

  此函数与JSON.parse()效果一致,推荐使用JSON.parse()。

JSON与XML比较

  XML在数据存储,扩展及高级检索方面具备优势。
  JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。

JSON 独立于语言

  JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

JSON与JavaScript

  JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

JSON与@ResponseBody

  Spring MVC中有一个注解@ResponseBody,使用此注解需引用三个依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.8.7</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.7</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.7</version>
</dependency>

  该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用场景:异步获取数据;返回值不是HTML页面,而是其他某种格式的数据(如json、xml等)。以下为示例代码:

function login() {
        var datas = '{"username":"' + $('#username').val() + '","userid":"' 
                + $('#userid').val() + '","status":"' + $('#status').val() + '"}';

    $.ajax({
        type : 'POST',
        contentType : 'application/json',
        url : "${pageContext.request.contextPath}/user/login",
        processData : false,
        dataType : 'json',
        data : datas,
        success : function(data) {
            alert("userid: " + data.userid + "username: " + data.username 
                    + "status: "+ data.status);
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert("出现异常,异常信息:"+textStatus,"error");
        }
    });
};
@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中,返回json对象响应回去
public User login(User user) {   
    User user = new User();
    user .setUserid(1);
    user .setUsername("MrF");
    user .setStatus("1");
    return user ;
}

  异步获取 Json 数据,加上 @Responsebody 注解后,就会直接返回 Json 数据。

JSON格式化工具

  https://c.runoob.com/front-end/53


参考资料: http://www.runoob.com/json/json-tutorial.html
参考资料: https://zh.wikipedia.org/zh-cn/JSON
参考资料: https://blog.csdn.net/ff906317011/article/details/78552426

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值