精华内容
下载资源
问答
  • JSON

    千次阅读 多人点赞 2019-08-23 16:13:01
    (一)JSON 教程 (二)JSON 语法 (三)JSON 对象 (四)JSON 数组 (五)JSON.parse() (六)JSON.stringify() (七)JSON 使用 (八)JSONP 教程

    (一)JSON 教程

    • JSON: JavaScript Object Notation(JavaScript 对象表示法)

    • JSON 是存储和交换文本信息的语法。类似 XML。

    • JSON 比 XML 更小、更快,更易解析。

    {
    “sites”: [
    { “name”:“菜鸟教程” , “url”:“www.runoob.com” },
    { “name”:“google” , “url”:“www.google.com” },
    { “name”:“微博” , “url”:“www.weibo.com” }
    ]
    }

    1.什么是 JSON ?
    • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
    • JSON 是轻量级的文本数据交换格式
    • JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
    • JSON 具有自我描述性,更易理解
    2.JSON - 转换为 JavaScript 对象
    • JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。

    • 由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

    3.实例
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    <h2>JavaScript 创建 JSON 对象</h2>
    <p>
    网站名称: <span id="jname"></span><br /> 
    网站地址: <span id="jurl"></span><br /> 
    网站 slogan: <span id="jslogan"></span><br /> 
    </p>
    <script>
    var JSONObject= {
        "name":"菜鸟教程",
        "url":"www.runoob.com", 
        "slogan":"学的不仅是技术,更是梦想!"
    };
    document.getElementById("jname").innerHTML=JSONObject.name 
    document.getElementById("jurl").innerHTML=JSONObject.url 
    document.getElementById("jslogan").innerHTML=JSONObject.slogan
    </script>
     
    </body>
    </html>
    
    

    在这里插入图片描述

    4.与 XML 相同之处
    • JSON 是纯文本
    • JSON 具有"自我描述性"(人类可读)
    • JSON 具有层级结构(值中存在值)
    • JSON 可通过 JavaScript 进行解析
    • JSON 数据可使用 AJAX 进行传输
    5.与 XML 不同之处
    • 没有结束标签
    • 更短
    • 读写的速度更快
    • 能够使用内建的 JavaScript eval() 方法进行解析
    • 使用数组
    • 不使用保留字
    6.为什么使用 JSON?

    对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

    • 使用 XML:
      读取 XML 文档
      使用 XML DOM 来循环遍历文档
      读取值并存储在变量中
    • 使用 JSON:
      读取 JSON 字符串
      用 eval() 处理 JSON 字符串

    (二)JSON 语法

    JSON 语法是 JavaScript 语法的子集。

    1.JSON 语法规则
    • 数据在名称/值对中
    • 数据由逗号分隔
    • 大括号保存对象
    • 中括号保存数组
    2.JSON 名称/值对

    JSON 数据的书写格式是:名称/值对。

    名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

    {
    key1:value1,
    key2:value2,

    }

    “name” : “菜鸟教程”

    这很容易理解,等价于这条 JavaScript 语句:

    name = “菜鸟教程”

    3.JSON 值

    数字(整数或浮点数)
    字符串(在双引号中)
    逻辑值(true 或 false)
    数组(在中括号中)
    对象(在大括号中)
    null

    4.JSON 数字

    JSON 数字可以是整型或者浮点型:

    { “age”:30 }

    5.JSON 对象

    JSON 对象在大括号({})中书写:

    对象可以包含多个名称/值对:

    { “name”:“菜鸟教程” , “url”:“www.runoob.com” }

    这一点也容易理解,与这条 JavaScript 语句等价:

    name = “菜鸟教程”
    url = “www.runoob.com”

    6.JSON 数组

    JSON 数组在中括号中书写:

    数组可包含多个对象:

    {
    “sites”: [
    { “name”:“菜鸟教程” , “url”:“www.runoob.com” },
    { “name”:“google” , “url”:“www.google.com” },
    { “name”:“微博” , “url”:“www.weibo.com” }
    ]
    }

    在上面的例子中,对象 “sites” 是包含三个对象的数组。每个对象代表一条关于某个网站(name、url)的记录。

    7.JSON 布尔值

    JSON 布尔值可以是 true 或者 false:

    { “flag”:true }

    8.JSON null

    JSON 可以设置 null 值:

    { “runoob”:null }

    9.JSON 使用 JavaScript 语法

    因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。

    通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:

    var sites = [
    { “name”:“runoob” , “url”:“www.runoob.com” },
    { “name”:“google” , “url”:“www.google.com” },
    { “name”:“微博” , “url”:“www.weibo.com” }
    ];

    可以像这样访问 JavaScript 对象数组中的第一项(索引从 0 开始)

    sites[0].name;

    返回的内容是:runoob

    可以像这样修改数据:

    sites[0].name=“菜鸟教程”;

    eg:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    <h2>JavaScript 创建 JSON 对象</h2>
    <p>第一个网站名称: <span id="name1"></span></p> 
    <p>第一个网站修改后的名称: <span id="name2"></span></p> 
    
    <script>
    var sites = [
    	{ "name":"runoob" , "url":"www.runoob.com" }, 
    	{ "name":"google" , "url":"www.google.com" }, 
    	{ "name":"微博" , "url":"www.weibo.com" }
    ];
    
    document.getElementById("name1").innerHTML=sites[0].name;
    // 修改网站名称
    sites[0].name="菜鸟教程";
    document.getElementById("name2").innerHTML=sites[0].name;
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    10.JSON 文件
    • JSON 文件的文件类型是 “.json”
    • JSON 文本的 MIME 类型是 “application/json”

    (三)JSON 对象

    1.对象语法

    实例:

    { “name”:“runoob”, “alexa”:10000, “site”:null }
    JSON 对象使用在大括号({})中书写。

    对象可以包含多个 key/value(键/值)对。

    key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

    key 和 value 中使用冒号(:)分割。

    每个 key/value 对使用逗号(,)分割。

    2.访问对象值
    • 可以使用点号(.)来访问对象的值:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>你可以使用点号(.)来访问 JSON 对象的值:</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, x;
    myObj = { "name":"runoob", "alexa":10000, "site":null };
    x = myObj.name;
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    • 也可以使用中括号([])来访问对象的值:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>你也可以使用中括号([])来访问 JOSN 对象的值:</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, x;
    myObj = myObj = { "name":"runoob", "alexa":10000, "site":null };
    x = myObj["name"];
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    3.循环对象
    • 可以使用 for-in 来循环对象的属性:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>使用 for-in 来循环对象的属性:</p>
    
    <p id="demo"></p>
    
    <script>
    var myObj = { "name":"runoob", "alexa":10000, "site":null };
    for (x in myObj) {
        document.getElementById("demo").innerHTML += x + "<br>";
    }
    </script>
    
    </body>
    </html>
    
    

    在这里插入图片描述

    • 在 for-in 循环对象的属性时,使用中括号([])来访问属性的值:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>for-in 循环对象的属性时,使用中括号([])来访问属性的值:</p>
    
    <p id="demo"></p>
    
    <script>
    var myObj = { "name":"runoob", "alexa":10000, "site":null };
    for (x in myObj) {
        document.getElementById("demo").innerHTML += myObj[x] + "<br>";
    }
    </script>
    
    </body>
    </html>
    
    

    在这里插入图片描述

    4.嵌套 JSON 对象
    • JSON 对象中可以包含另外一个 JSON 对象:

    在这里插入图片描述

    • 你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>访问 JSON 内嵌对象。</p>
    
    <p id="demo"></p>
    
    <script>
    myObj = {
    	"name":"runoob",
    	"alexa":10000,
    	"sites": {
    		"site1":"www.runoob.com",
    		"site2":"m.runoob.com",
    		"site3":"c.runoob.com"
    	}
    }
    document.getElementById("demo").innerHTML += myObj.sites.site1 + "<br>";
    // 或者
    document.getElementById("demo").innerHTML += myObj.sites["site1"];
    </script>
    
    </body>
    </html>
    
    

    在这里插入图片描述

    5.修改值
    • 可以使用点号(.)来修改 JSON 对象的值:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>修改 JSON 对象的值。</p>
    
    <p id="demo"></p>
    
    <script>
    var myObj, i, x = "";
    myObj = {
        "name":"runoob",
        "alexa":10000,
        "sites": {
            "site1":"www.runoob.com",
            "site2":"m.runoob.com",
            "site3":"c.runoob.com"
        }
    }
    myObj.sites.site1 = "www.google.com";
    
    for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    • 可以使用中括号([])来修改 JSON 对象的值:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>使用中括号([])来修改 JSON 对象的值。</p>
    
    <p id="demo"></p>
    
    <script>
    var myObj, i, x = "";
    myObj = {
        "name":"runoob",
        "alexa":10000,
        "sites": {
            "site1":"www.runoob.com",
            "site2":"m.runoob.com",
            "site3":"c.runoob.com"
        }
    }
    myObj.sites["site1"] = "www.google.com";
    
    for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    
    6.删除对象属性
    • 可以使用 delete 关键字来删除 JSON 对象的属性:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body><p>删除 JSON 对象属性。</p><p id="demo"></p><script>
    var myObj, i, x = "";
    myObj = {
        "name":"runoob",
        "alexa":10000,
        "sites": {
            "site1":"www.runoob.com",
            "site2":"m.runoob.com",
            "site3":"c.runoob.com"
        }
    }
    delete myObj.sites.site1;for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    ​
    document.getElementById("demo").innerHTML = x;</script></body>
    </html>
    

    在这里插入图片描述

    • 可以使用中括号([])来删除 JSON 对象的属性:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>删除 JSON 对象属性。</p>
    
    <p id="demo"></p>
    
    <script>
    var myObj, i, x = "";
    myObj = {
        "name":"runoob",
        "alexa":10000,
        "sites": {
            "site1":"www.runoob.com",
            "site2":"m.runoob.com",
            "site3":"c.runoob.com"
        }
    }
    delete myObj.sites["site1"];
    
    for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    (四)JSON 数组

    1.数组作为 JSON 对象

    实例
    [ “Google”, “Runoob”, “Taobao” ]

    JSON 数组在中括号中书写。

    JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

    JavaScript 中,数组值可以是以上的 JSON 数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined。

    2.JSON 对象中的数组
    • 对象属性的值可以是一个数组:

    实例
    {
    “name”:“网站”,
    “num”:3,
    “sites”:[ “Google”, “Runoob”, “Taobao” ]
    }

    • 可以使用索引值来访问数组:
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>访问 JSON 对象数组值。</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, x;
    myObj = {
    	"name":"网站",
    	"num":3,
    	"sites":[ "Google", "Runoob", "Taobao" ]
    }
    x = myObj.sites[0];
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    3.循环数组
    • 可以使用 for-in 来访问数组:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>你可以使用 for-in 来访问数组:</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, i, x = "";
    myObj = {
    	"name":"网站",
    	"num":3,
    	"sites":[ "Google", "Runoob", "Taobao" ]
    };
    
    for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html> 
    

    在这里插入图片描述

    • 也可以使用 for 循环:
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>使用 for 循环访问数组:</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, i, x = "";
    myObj = {
    	"name":"网站",
    	"num":3,
    	"sites":[ "Google", "Runoob", "Taobao" ]
    };
    
    for (i = 0; i < myObj.sites.length; i++) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    4.嵌套 JSON 对象中的数组
    • JSON 对象中数组可以包含另外一个数组,或者另外一个 JSON 对象:

    实例
    myObj = {
    “name”:“网站”,
    “num”:3,
    “sites”: [
    { “name”:“Google”, “info”:[ “Android”, “Google 搜索”, “Google 翻译” ] },
    { “name”:“Runoob”, “info”:[ “菜鸟教程”, “菜鸟工具”, “菜鸟微信” ] },
    { “name”:“Taobao”, “info”:[ “淘宝”, “网购” ] }
    ]
    }

    • 可以使用 for-in 来循环访问每个数组:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>循环内嵌数组:</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, i, j, x = "";
    myObj = {
        "name":"网站",
        "num":3,
        "sites": [
            { "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },
            { "name":"Runoob", "info":[ "菜鸟教程", "菜鸟工具", "菜鸟微信" ] },
            { "name":"Taobao", "info":[ "淘宝", "网购" ] }
        ]
    }
    
    for (i in myObj.sites) {
        x += "<h1>" + myObj.sites[i].name + "</h1>";
        for (j in myObj.sites[i].info) {
            x += myObj.sites[i].info[j] + "<br>";
        }
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html> 
    

    在这里插入图片描述

    5.修改数组值
    • 可以使用索引值来修改数组值:
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>修改 JSON 对象数组值。</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj, i, x = "";
    myObj = {
    	"name":"网站",
    	"num":3,
    	"sites":[ "Google", "Runoob", "Taobao" ]
    };
     myObj.sites[1] = "Github";
    
    for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    6.删除数组元素
    • 可以使用 delete 关键字来删除数组元素:
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <p>删除数组元素</p>
    
    <p id="demo"></p>
    
    <script>
    var myObj, i, x = "";
    myObj = {
    	"name":"网站",
    	"num":3,
    	"sites":[ "Google", "Runoob", "Taobao" ]
    };
    delete myObj.sites[1];
    
    for (i in myObj.sites) {
        x += myObj.sites[i] + "<br>";
    }
    
    document.getElementById("demo").innerHTML = x;
    
    </script>
    
    </body>
    </html>
    

    在这里插入图片描述

    (五)JSON.parse()

    JSON 通常用于与服务端交换数据。

    在接收服务器数据时一般是字符串。

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

    • 语法

    JSON.parse(text[, reviver])

    • 参数说明:
      • text:必需, 一个有效的 JSON 字符串。
      • reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
    1.JSON 解析实例

    例如我们从服务器接收了以下数据:

    { “name”:“runoob”, “alexa”:10000, “site”:“www.runoob.com” }

    我们使用 JSON.parse() 方法处理以上数据,将其转换为 JavaScript 对象:

    var obj = JSON.parse(’{ “name”:“runoob”, “alexa”:10000, “site”:“www.runoob.com” }’);

    解析前要确保你的数据是标准的 JSON 格式,否则会解析出错。
    你可以使用我们的在线工具检测:https://c.runoob.com/front-end/53。

    解析完成后,我们就可以在网页上使用 JSON 数据了:

     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>JSON 对象中创建 JavaScript 对象</h2>
    
    <p id="demo"></p>
    
    <script>
    var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');
    document.getElementById("demo").innerHTML = obj.name + ":" + obj.site;
    </script>
    
    </body>
    </html>
     
    

    在这里插入图片描述

    2.从服务端接收 JSON 数据
    • 我们可以使用 AJAX 从服务器请求 JSON 数据,并解析为 JavaScript 对象。
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>使用 XMLHttpRequest 来获取文件内容</h2>
    <p>文件内容是标准的 JSON 格式,可以使用 JSON.parse 方法将其转换为 JavaScript 对象。</p>
    
    <p id="demo"></p>
    
    <script>
    
    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();
    
    </script>
    
    <p>查看 JSON 文件数据 <a href="/try/ajax/json_demo.txt" target="_blank">json_demo.txt</a></p>
    
    </body> 
    </html>
     
    

    在这里插入图片描述

    2.1 XMLHttpRequest对象的一个简单运用示例

    XMLHttpRequest()是一个构建HTTP请求的JavaScript对象(即构造器)。
    XMLHttpRequest()对象的用法,主要分为两个有效步骤:

    • 发送请求——这一步,完成XMLHttpRequest对象的构建,并为其设置时间监听器。
    • 处理响应——这一步,事件监听器会在服务器的响应信息到达时发出通知,然后代码就会忙于从中提取有用的信息

    发送请求 :
    1、创建一个对象,并为其设置一个能触发readystatechange事件的事件监听器

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = callback;

    2、调用open()方法

    xhr.open(‘GET’, ‘myfile.txt’, true);

    第一个参数是http请求的类型(GET、POST、HEAD等);第二个参数是请求目标的URL(该示例请求的是与当前页面处于同一目录下的文本文件myfile.txt)。第三个参数是布尔值,该值决定了请求是否按照异步的方式进行(true表示异步请求,false表示不是异步请求)。

    3、发送请求

    xhr.send(’’); //该示例发送一个空字符串

    处理响应
    每个XHR对象中都有一个readystate属性。一旦该属性值改变就会触发readystatechange事件。该属性可能的状态中有:

    0——未初始化状态
    1——载入请求状态
    2——载入请求完成状态
    3——请求交互状态
    4——请求完成状态

    当请求的值为4时,说明服务端的响应信息已经返回,可以处理了。在callback函数中,除了确定readyState的值是4外,还要检查http请求的状态码。如果目标URL实际上不存在,就会收到一个值为404的状态码(表示未找到文件),正常情况下值为200。状态码可以通过XHR对象的statues属性来获得。
    一旦xhr.readyState值为4并且xhr.status值为200,就可以通过xhr.responseText来访问目标URL中的内容了。下面代码演示了在callback中实现用alert()方法来显示目标URL中的内容:

    function callback() {
    if (xhr.readyState < 4) {
    return;
    };
    if (xhr.status !== 200) {
    alert(‘the status code is not ok’);
    return;
    };
    alert(xhr.responseText);
    }

    • responseText:获取字符串形式的响应数据
    • responseXML:获取 XML 形式的响应数据
    • status 和 statusText:以数字和文本形式返回 HTTP 状态码
    • getAllResponseHeader():获取所有的响应报头
    • getResponseHeader():查询响应中某个字段的值
    3.从服务端接收数组的 JSON 数据
    • 如果从服务端接收的是数组的 JSON 数据,则 JSON.parse 会将其转换为 JavaScript 数组:
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>内容是数组</h2>
    <p>内容是数组会转换为 JavaScript 数组。</p>
    
    <p id="demo"></p>
    
    <script>
    
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myArr = JSON.parse(this.responseText);
            document.getElementById("demo").innerHTML = myArr[1];
        }
    };
    xmlhttp.open("GET", "/try/ajax/json_demo_array.txt", true);
    xmlhttp.send();
    
    </script>
    
    <p>查看服务端数据 <a href="/try/ajax/json_demo_array.txt" target="_blank">json_demo_array.txt</a></p>
    
    </body>
    </html>
     
    

    在这里插入图片描述

    在这里插入图片描述

    4.异常
    4.1 解析数据
    • JSON 不能存储 Date 对象。
      如果你需要存储 Date 对象,需要将其转换为字符串,之后再将字符串转换为 Date 对象。
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>将字符串转换为 Date 对象。</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var text = '{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}';
    var obj = JSON.parse(text);
    obj.initDate = new Date(obj.initDate);
    
    document.getElementById("demo").innerHTML = obj.name + "创建日期: " + obj.initDate;
    
    </script>
    
    </body>
    </html>
     
    

    在这里插入图片描述

    • 我们可以启用 JSON.parse 的第二个参数 reviver,一个转换结果的函数,对象的每个成员调用此函数。
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>字符串转换为 Date 对象</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var text = '{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}';
    var obj = JSON.parse(text, function (key, value) {
    	if (key == "initDate") {
    	    return new Date(value);
    	} else {
    	    return value;
    }});
    
    document.getElementById("demo").innerHTML = obj.name + "创建日期:" + obj.initDate;
    
    </script>
    
    </body>
    </html>
     
    
    4.2 解析函数
    • JSON 不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>字符串转换为函数</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var text = '{ "name":"Runoob", "alexa":"function () {return 10000;}", "site":"www.runoob.com"}';
    var obj = JSON.parse(text);
    obj.alexa = eval("(" + obj.alexa + ")");
    
    document.getElementById("demo").innerHTML = obj.name + " Alexa 排名:" + obj.alexa(); 
    
    </script>
    
    </body>
    </html> 
     
    

    在这里插入图片描述

    • 不建议在 JSON 中使用函数。
    4.3 浏览器支持
    • 主流浏览器都支持 JSON.parse() 函数:

    Firefox 3.5
    Internet Explorer 8
    Chrome
    Opera 10
    Safari 4

    (六)JSON.stringify()

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

    1. 语法

    JSON.stringify(value[, replacer[, space]])

    参数说明:

    • value:必需, 要转换的 JavaScript 值(通常为对象或数组)。
    • replacer:可选。用于转换结果的函数或数组。
      如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
      如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。
    • space:可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
    2. JavaScript 对象转换

    例如我们向服务器发送以下数据:

    var obj = { “name”:“runoob”, “alexa”:10000, “site”:“www.runoob.com”};

    使用 JSON.stringify() 方法处理以上数据,将其转换为字符串:

    var myJSON = JSON.stringify(obj);

    myJSON 为字符串。

    我们可以将 myJSON 发送到服务器:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>将 JavaScript 对象转换为 JSON 字符串</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var obj = { "name":"runoob", "alexa":10000, "site":"www.runoob.com"};
    var myJSON = JSON.stringify(obj);
    document.getElementById("demo").innerHTML = myJSON;
    
    </script>
    
    </body>
    </html>
     
    

    在这里插入图片描述

    3. JavaScript 数组转换
    • 我们也可以将 JavaScript 数组转换为 JSON 字符串:

    实例
    var arr = [ “Google”, “Runoob”, “Taobao”, “Facebook” ];
    var myJSON = JSON.stringify(arr);

    myJSON 为字符串。
    我们可以将 myJSON 发送到服务器:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>将 JavaScript 数组转换为 JSON 对象</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var arr = [ "Google", "Runoob", "Taobao", "Facebook" ];
    var myJSON = JSON.stringify(arr);
    document.getElementById("demo").innerHTML = myJSON;
    
    </script>
    
    </body>
    </html>
     
    

    在这里插入图片描述

    4. 异常
    4.1 解析数据

    JSON 不能存储 Date 对象。
    JSON.stringify() 会将所有日期转换为字符串。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>JSON.stringify 将 Date 对象转换为字符串</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var obj = { "name":"Runoob", "initDate":new Date(), "site":"www.runoob.com"};
    var myJSON = JSON.stringify(obj);
    document.getElementById("demo").innerHTML = myJSON;
    
    </script>
    
    </body>
    </html>
     
    

    在这里插入图片描述
    之后你可以再将字符串转换为 Date 对象。

    4.2 解析函数

    JSON 不允许包含函数,JSON.stringify() 会删除 JavaScript 对象的函数,包括 key 和 value。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>JSON.stringify 将删除对象中的函数</h2>
    
    <p id="demo"></p>
    
    <script>
    
    var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"};
    var myJSON = JSON.stringify(obj);
    document.getElementById("demo").innerHTML = myJSON;
    
    </script>
    
    </body>
    </html>
     
    

    在这里插入图片描述
    我们可以在执行 JSON.stringify() 函数前将函数转换为字符串来避免以上问题的发生:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    
    <h2>JSON.stringify 将移除对象中的函数</h2>
    
    <p>我们可以在执行 JSON.stringify() 函数前将函数转换为字符串来保留函数。</p>
    
    <p id="demo"></p>
    
    <script>
    
    var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"};
    obj.alexa = obj.alexa.toString();
    var myJSON = JSON.stringify(obj);
    document.getElementById("demo").innerHTML = myJSON;
    
    </script>
    
    </body>
    </html>
    

    不建议在 JSON 中使用函数。

    4.3 浏览器支持

    主流浏览器都支持 JSON.stringify() 函数:

    Firefox 3.5
    Internet Explorer 8
    Chrome
    Opera 10
    Safari 4

    (七)JSON 使用

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

    1. JSON 实例 - 来自字符串的对象

    创建包含 JSON 语法的 JavaScript 字符串:

    var txt = ‘{ “sites” : [’ +
    ‘{ “name”:“菜鸟教程” , “url”:“www.runoob.com” },’ +
    ‘{ “name”:“google” , “url”:“www.google.com” },’ +
    ‘{ “name”:“微博” , “url”:“www.weibo.com” } ]}’;

    由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

    eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

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

    在网页中使用 JavaScript 对象:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    <h2>JSON 字符串中创建对象</h2>
    <p>
    网站名: <span id="name"></span><br> 
    网站地址: <span id="url"></span><br> 
    </p> 
    <script>
    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 
    </script>
    </body>
    </html>
    
    

    在这里插入图片描述

    2. JSON 解析器

    eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。

    使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

    在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。

    较新的浏览器和最新的 ECMAScript (JavaScript) 标准中均包含了原生的对 JSON 的支持。

    在这里插入图片描述
    使用eval()函数

    Js代码:
    var data="
    {
    root:
    [
    {name:‘1’,value:‘0’},
    {name:‘6101’,value:‘北京市’},
    {name:‘6102’,value:‘天津市’},
    {name:‘6103’,value:‘上海市’},
    {name:‘6104’,value:‘重庆市’},
    {name:‘6105’,value:‘渭南市’},
    {name:‘6106’,value:‘延安市’},
    {name:‘6107’,value:‘汉中市’},
    {name:‘6108’,value:‘榆林市’},
    {name:‘6109’,value:‘安康市’},
    {name:‘6110’,value:‘商洛市’}
    ]
    }";
    var dataObj=eval("("+data+")");//转换为json对象

    为什么要 eval这里要添加 “("("+data+")");//”呢?
    原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
    加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

    Js代码
    alert(eval("{}"); // return undefined
    alert(eval("({})");// return object[Object]

    对于这种写法,在JS中,可以到处看到。
    如: (function()) {}(); 做闭包操作时等。

    (八)JSONP 教程

    Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

    为什么我们从不同的域(网站)访问数据需要一个特殊的技术( JSONP )呢?这是因为同源策略。

    同源策略,它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。

    1. JSONP 应用
    1.1 服务端 JSONP 格式数据

    如客户想访问 : https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction。

    假设客户期望返回数据:[“customername1”,“customername2”]。

    真正返回到客户端的数据显示为: callbackFunction([“customername1”,“customername2”])。

    服务端文件 jsonp.php 代码为:

    jsonp.php 文件代码
    <?php
    header('Content-type: application/json');
    //获取回调函数名
    $jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
    //json数据
    $json_data = '["customername1","customername2"]';
    //输出jsonp格式的数据
    echo $jsoncallback . "(" . $json_data . ")";
    ?>
    
    
    1.2 客户端实现 callbackFunction 函数
    <script type="text/javascript">
    function callbackFunction(result, methodName)
    {
        var html = '<ul>';
        for(var i = 0; i < result.length; i++)
        {
            html += '<li>' + result[i] + '</li>';
        }
        html += '</ul>';
        document.getElementById('divCustomers').innerHTML = html;
    }
    </script>
    

    页面展示:

    <div id="divCustomers"></div>
    

    客户端页面完整代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>JSONP 实例</title>
    </head>
    <body>
    <div id="divCustomers"></div>
    <script type="text/javascript">
    function callbackFunction(result, methodName)
    {
        var html = '<ul>';
        for(var i = 0; i < result.length; i++)
        {
            html += '<li>' + result[i] + '</li>';
        }
        html += '</ul>';
        document.getElementById('divCustomers').innerHTML = html;
    }
    </script>
    <script type="text/javascript" src="https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>
    </body>
    </html>
    
    2. jQuery 使用 JSONP

    以上代码可以使用 jQuery 代码实例:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSONP 实例</title>
        <script src="https://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>    
    </head>
    <body>
    <div id="divCustomers"></div>
    <script>
    $.getJSON("https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?", function(data) {
        
        var html = '<ul>';
        for(var i = 0; i < data.length; i++)
        {
            html += '<li>' + data[i] + '</li>';
        }
        html += '</ul>';
        
        $('#divCustomers').html(html); 
    });
    </script>
    </body>
    </html>
    
    展开全文
  • 但是 JSON比XML数据传输的有效要高出很多。 JSON完全独立与编程语言,使用文本格式保存。JSON的数据格式是名/值对,其中值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在...
  • Struts2 ajax 返回json完整json被截断 原因:jsonplugin与中文字符的兼容问题。 解决方案:jsonplugin-0.7.jar删掉,用jsonplugin-0.30.jar.

    Struts2 ajax 返回json不完整,json被截断

    原因:jsonplugin与中文字符的兼容性问题。

    解决方案:jsonplugin-0.7.jar删掉,用jsonplugin-0.30.jar.

    展开全文
  • 有研究hadoop的同学吗?以64M大小对文件分块时,MapReduce的InputFormat分块会破坏json数据的完整性吗?
  • json

    2009-11-11 08:20:00
    很容易发现,使用JSON不仅减少了解析XML解析带来的性能问题和兼容问题,而且对于JavaScript来说非常容易使用,可以方便的通过遍历数组 以及访问对象属性来获取数据,其可读性也不错,基本具备了结构化数据的性质。...

     格式定义非常简单,就是通过一组键值对来定义一个对象。
    你可以直接将这种格式的数据赋值给一个变量,然后通过键名取值。相对于使用xml来作为数据交换格式,如果要在javascript里使用,首先需要创建 一个DOMParser,然后通过DOM接口访问节点对象,非常繁琐,更不用说不同浏览器的实现中DOMParser的实现和DOM接口都有诸多不同。为 什么大量的AJAX应用中宁可直接返回一个HTML片断而不是直接把 XML交给javascript处理,一个主要原因就是处理XML的过程比较复杂。JSON最重要的贡献就是简化了解析数据的过程。
    del.icio.us提供的在网页上显示书签的javascript脚本就基于JSON,
    看一下这个脚本 ,再设想一下通过AJAX读取del.icio.us提供的RSS接口来实现这个功能,就能体会JSON的巧妙了。
    除此之外,更有人提出类似XSLT的
    JSONT ,可以将JSON格式的内容转换成其他形式,虽然还暂时还没有XSLT灵活和强大,至少展示了一种可能性。(文章来源 www.iocblog.net)
    JSON解决的另一个传统AJAX中xmlhttprequest不能解决的问题就是跨域链接的问题。基于安全考虑,各种浏览器缺省都不允许 xmlhttprequest跨域名链接,abc.com页面上的xmlhttprequest是无法连接def.com的内容的。在网页中,JSON可 以采用引入script元素的方式导入数据,html中的script可以指定非本地脚本,跨域链接的问题得以解决。但使用这样的方式导入JSON数据, 是一个同步的过程(是否可以用defer属性来实现异步?),这点上不如xmlhttpreqeust灵活。
    JSON运行信赖包文件如下:
    ezmorph-1.0.1.jar 
    http://ezmorph.sourceforge.net/
    http://jakarta.apache.org/commons/index.html
    commons-beanutils.jar
    commons-httpclient.jar
    commons-lang.jar
    commons-logging.jar

    JSON定义
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于ECMA262语言规范(1999-12第三版)中JavaScript 编程语言的一个子集。 JSON采用与编程语言无关的文本格式,但是也使用了类C语言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的习惯,这些特性使JSON成为理想的数据交换格式。
    [只是一种数据交换用的语言而已的哦!]
    JSON的结构基于下面两点

    • 1. "名称/值"对的集合 不同语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),键列表(keyed list)等
    • 2. 值的有序列表 多数语言中被理解为数组(array)

    其也是有自己的语言格式的哦!
    JSON以一种特定的字符串形式来表示 JavaScript 对象。如果将具有这样一种形式的字符串赋给任意一个 JavaScript 变量,那么该变量会变成一个对象引用,而这个对象就是字符串所构建出来的,好像有点拗口,我们还是用实例来说明。

     这里假设我们需要创建一个User对象,并具有以下属性

    • 用户ID
    • 用户名
    • 用户Email

      您可以使用以下JSON形式来表示User对象:

      {"UserID":11, "Name":"Truly", "Email":"zhuleipro◎hotmail.com"};
      
      

      然后如果把这一字符串赋予一个JavaScript变量,那么就可以直接使用对象的任一属性了。(文章来源 www.iocblog.net)

      完整代码:

       

      实际使用时可能更复杂一点,比如我们为Name定义更详细的结构,使它具有FirstName和LastName:

      {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"}
      
      

      完整代码:

       

      现在我们增加一个新的需求,我们某个页面需要一个用户列表,而不仅仅是一个单一的用户信息,那么这里就需要创建一个用户列表数组。
      下面代码演示了使用JSON形式定义这个用户列表:

      [
      {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"},
      {"UserID":12, "Name":{"FirstName":"Jeffrey","LastName":"Richter"}, "Email":"xxx◎xxx.com"},
      {"UserID":13, "Name":{"FirstName":"Scott","LastName":"Gu"}, "Email":"xxx2◎xxx2.com"}
      ]


      完整代码:

       

      事实上除了使用"."引用属性外,我们还可以使用下面语句:

      alert(UserList[0]["Name"]["FirstName"]); 或者 alert(UserList[0].Name["FirstName"]); 
      
      

      现在读者应该对JSON的使用有点认识了,归纳为以下几点:

    • 对象是属性、值对的集合。一个对象的开始于“{”,结束于“}”。每一个属性名和值间用“:”提示,属性间用“,”分隔。
    • 数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。
    • 值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。
    • 字符串和数字的定义和C或Java基本一致。

      小节

      本文通过一个实例演示,初步了解了JSON 的强大用途。可以归结如下:

    • JSON 提供了一种优秀的面向对象的方法,以便将元数据缓存到客户机上。
    • JSON 帮助分离了验证数据和逻辑。
    • JSON 帮助为 Web 应用程序提供了 Ajax 的本质。

      参考资料:
      http://www.json.org/

    对象及数组分开是这样来定义的哦!
    通过{}及[]来分别定义
    属性名与值之间是用:提示,属性之间用,分隔的哦!
    Ajax对象来传递信息,可以读作“Jason”

    AJAX中可以不用XML了哈哈,直接用JS中自身的对象来处理的哦!
    JSON概念很简单,就是服务器直接生成 JavaScript语句,客户端获取后直接用eval方法来获得这个对象,
    [可以说是在服务器直接生成了JS语句然后客户端通过eval命令得到这个对象之后就可以利用这个对象了!]
    这样就可以省去解析XML的性能损失。比如传递Blog评论的示例:
    使用XML表示:

    <comments>
     <comment>
      <id>1</id>
      <author>someone1</author>
      <url>http://someone1.x2design.net</url>
      <content>hello</content>
     </comment>
     <comment>
      <id>2</id>
      <author>someone2</author>
      <url>http://someone2.x2design.net</url>
      <content>someone1</content>
     </comment>
     <comment>
      <id>3</id>
      <author>someone3</author>
      <url>http://someone3.x2design.net</url>
      <content>hello</content>
     </comment>
    </comments>


    使用JSON:
    分析一下这个对象:{}
    {comments:[{},{},{}]};对象之间是通过,进行分隔开的哦!

    {comments:[
     {
      id:1,
      author:"someone1",
      url:"http://someone1.x2design.net",
      content:"hello"
     },
     {
      id:2,
      author:"someone2",
      url:"http://someone2.x2design.net",
      content:"hello"
     },
     {
      id:3,
      author:"someone3",[www.iocblog.net 来源]
      url:"http://someone3.x2design.net",
      content:"hello"
     }
    ]};


    很容易发现,使用JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于JavaScript来说非常容易使用,可以方便的通过遍历数组 以及访问对象属性来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,
               而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。

    JSON的另外一个优势是跨域可行性,例如你在www.xxx.com的网页里使用是完全可行的,这就意味着你可以跨域传递信 息。而使用XMLHttpRequest却获取不了跨域的信息,这是JavaScript内部的安全性质所限制的。

    JSON看上去很美,是不是就能完全取代XML呢?事实并非如此,而原因就在于XML的优势:通用性。要使服务器端产生语法合格的JavaScript代 码并不是很容易做到的,这主要发生在比较庞大的系统,服务器端和客户端有不同的开发人员。它们必须协商对象的格式,这很容易造成错误。
    无论如何,JSON是一个诱人的技术,准备在X2Blog做一个大量的试用。希望届时可以获取大的性能提高。
    [可以尝试玩一下用JSON+JS实现新的AJAX技术吧!]

    很多资料上都说JSON在更多的场合都比XML更适合Ajax的数据传送,但google很久没有找到JSON的如何像XML那样的遍历,其实JSON是一种JS定义对象的一种特殊的形势,所以可以按照对象的方法来访问,但又有一些不同.JSON太神奇了,呵呵,做了个小例子,不知道如何读取JSON中的值的朋友看一下吧!

    [来源www.iocblog.net]

    此外,如果服务器返回得responseText内容是{"msg":[{"user":"llinzzi","msg":"你好"},{"user": "Huanhuan","msg":"嘿嘿"}],"type":"test"}格式的,在ajax要进行赋值的时候必须是
    var msg=eval('(' + req.responseText + ')');
    [来源www.iocblog.net]

    ?现在要想一个问题就是服务器端如何生成JSON呢?

    和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。

    String,Number 和 Boolean 用 JSON 表示非常简单。例如,用 JSON 表示一个简单的 String “ abc ”,其格式为:

    abc"
    
    
    除了字符 "// 和一些控制符(/b/f/n/r/t )需要编码外,其他 Unicode 字符可以直接输出。下图是一个 String 的完整表示结构
    可以传递字符串及数组形式的东西!
         Boolean 类型表示为 truefalse 。此外,JavaScript 中的 null 被表示为 null ,注意,truefalsenull 都没有双引号,否则将被视为一个 String 。
         JSON 还可以表示一个数组对象,使用 [] 包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value,例如,以下数组包含了一个 String,Number,Boolean 和一个 null:

    ["abc",12345,false,null]
    它的数据类型其实与其他语言的很相似的哦!包含了基本数据类型及对象类型!

    Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map<String, Object> ,而不是 Java 的 Class 。注意 Key 只能用 String 表示。对象是用{}表示的哦!相当于Map正是所谓的名值对应关系啊!

    例如,一个 Address 对象包含如下 Key-Value:

    city:Beijing street:Chaoyang Road postcode:100025(整数)

    用 JSON 表示如下:

    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
    
    

    其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:

    {"name":"Michael","address":
    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
    }
    其实一个名所对应的值也可以是一个对象的哦!
    {"name":"Michael","address":{"city":"beijing","street":"chong road"}}这里面的一个值就是一个对象了!
    1.如何用JS来处理JSON呢?
    function handleJson() {
    var j={"name":"Michael","address":
    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
    };
    document.write(j.name);
    document.write(j.address.city);
    }
    可以变量J就是一个JSON对象了。包括了值又是一个对象

    假定服务器返回的 JSON 数据是上文的:

    {"name":"Michael","address":
    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

    }

    只需将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了,相比 XML 需要从 DOM 中读取各种节点而言,JSON 的使用非常容易。我们需要做的仅仅是发送一个 Ajax 请求,然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理 JSON 数据的能力,例如 Prototype(一个流行的 JavaScript 库:http://prototypejs.org)提供了 evalJSON() 方法,能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量:

    new Ajax.Request("http://url", { method: "get", onSuccess: function(transport) { var json = transport.responseText.evalJSON(); // TODO: document.write(json.xxx); } });
    客户端要如何来得到这个JSON对象呢?通过内库来用方法哦!
    看看在服务器生成JSON呢?
    将 String 对象编码为 JSON 格式时,只需处理好特殊字符即可。另外,必须用 (" ) 而非 (' ) 表示字符串:String 中的话要特别注意好特殊字符的处理了!
    为了能够控制得好字符串的输出看看如何处理的?

     static String string2Json(String s) { 
    StringBuilder sb = new StringBuilder(s.length()+20);
    sb.append('/"');
    for (int i=0; i<s.length(); i++) {
    char c = s.charAt(i);
    switch (c) {
    case '/"': //处理这种特殊字符串哦!
    sb.append("///"");
    break;
    case '//':
    sb.append("");
    break;
    case '/':
    sb.append("///");
    break;
    case '/b':
    sb.append("//b");
    break;
    case '/f':
    sb.append("//f");
    break;
    case '/n':
    sb.append("//n");
    break;
    case '/r':
    sb.append("//r");
    break;
    case '/t':
    sb.append("//t");
    break;
    default:
    sb.append(c);
    }
    }
    sb.append('/"');
    return sb.toString();
    }

    将 Number 表示为 JSON 就容易得多,利用 Java 的多态,我们可以处理 Integer,Long,Float 等多种 Number 格式:

    static String number2Json(Number number) { return number.toString(); }

    Boolean 类型也可以直接通过 toString() 方法得到 JSON 的表示:

    static String boolean2Json(Boolean bool) { return bool.toString(); }

    要将数组编码为 JSON 格式,可以通过循环将每一个元素编码出来:

     static String array2Json(Object[] array) { 
    if (array.length==0)
    return "[]";
    StringBuilder sb = new StringBuilder(array.length << 4);
    sb.append('[');
    for (Object o : array) {
    sb.append(toJson(o));
    sb.append(',');
    }
    // 将最后添加的 ',' 变为 ']':
    sb.setCharAt(sb.length()-1, ']');
    return sb.toString();
    }

    最后,我们需要将 Map<String, Object> 编码为 JSON 格式,因为 JavaScript 的 Object 实际上对应的是 Java 的 Map<String, Object> 。该方法如下:

    static String map2Json(Map<String, Object> map) { if (map.isEmpty()) return "{}"; StringBuilder sb = new StringBuilder(map.size() << 4); sb.append('{'); Set<String> keys = map.keySet(); for (String key : keys) { Object value = map.get(key); sb.append('/"'); sb.append(key); sb.append('/"'); sb.append(':'); sb.append(toJson(value)); sb.append(','); } // 将最后的 ',' 变为 '}': sb.setCharAt(sb.length()-1, '}'); return sb.toString(); }
    告诉了我们如何生成的每一种数据类型,包括字符串数字布尔类型及数组仍至于Map类型。

    为了统一处理任意的 Java 对象,我们编写一个入口方法 toJson(Object) ,能够将任意的 Java 对象编码为 JSON 格式:

     public static String toJson(Object o) { //可以将对象编码成JSON格式哦!

     if (o==null) 
    return "null";
    if (o instanceof String)
    return string2Json((String)o);
    if (o instanceof Boolean)
    return boolean2Json((Boolean)o);
    if (o instanceof Number)
    return number2Json((Number)o);
    if (o instanceof Map)
    return map2Json((Map<String, Object>)o);
    if (o instanceof Object[])
    return array2Json((Object[])o);
    throw new RuntimeException("Unsupported type: " + o.getClass().getName());
    }
    已经成功编码成功了JSON了,现在就可以考虑如何从服务器端往客户端输出了哦!
    response.setContentType("application/json;charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    PrintWriter pw = response.getWriter();
    pw.write(JsonUtil.toJson(obj));
    pw.flush();
    JSON 已经是 JavaScript 标准的一部分。目前,主流的浏览器对 JSON 支持都非常完善。
    应用 JSON,我们可以从 XML 的解析中摆脱出来,
    对那些应用 Ajax 的 Web 2.0 网站来说,JSON 确实是目前最灵活的轻量级方案。


    (二)

     

    JSON JavaScript Object Notation 允许轻松地将 JavaScript 对象转换成可以随请求发送的数据(同步或异步都 可以)。本文首先介绍 JSON 的数据格式,接着介绍如何在 JavaScript 中使用 JSON ,重点介绍一下如何使用 JSON 完成数据的异步传输。

     

    1.  JSON 的数据格式

    a)         按照最简单的形式,可以用下面这样的 JSON 表示 名称 / 值对:

    { "firstName": "Brett" }

     

    b)        可以创建包含多个名称 / 值对的记录 ,比如:

    { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

     

    c)         可以创建值的数组

    { "people": [

     { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },

     { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }

    ]}

     

    d)        当然,可以使用相同的语法表示多个值(每个值包含多个 记录)

    { "programmers": [

     { "firstName": "Brett", "lastName":"McLaughlin", " email ": "brett@newInstance.com" },

     { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }

     ],

    "authors": [

     { "firstName": "Isaac", "lastName": "Asimov", " genre ": "science fiction" },

     { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }

    ],

    "musicians": [

     { "firstName": "Eric", "lastName": "Clapton", " instrument ": "guitar" }

    ]

    }

     

    注意 ,在不同的主条目( programmers authors musicians )之间,记录中实际的名称 / 值对可以不一样。 JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

     

    2.  JavaScript 中使用 JSON

    JSON JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。  

    2.1   JSON 数据赋值给变量

    例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

    var people =

     { "programmers": [

        { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },

        { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }

       ],

     "authors": [

        { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },

        { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }

       ],

     "musicians": [

        { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }

       ]

     }

     

    2.2   访问数据

    将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号 表示法来表 示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

    people . programmers [0]. lastName;

    注意 数组索引是从零开始的

     

    2.3   修改 JSON 数据

    正如访问数据,可以按照 同样的方式修改数据:

    people . musicians [1]. lastName = "Rachmaninov";

     

    2.4   转换回字符串

    a)         JavaScript 中这种转换也很简单:

    String  newJSONtext  =  people. toJSONString( );

     

    b)        可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:

    String  myObjectInJSON  =  myObject.toJSONString();

     

    说明:将转换回的字符串 作为 Ajax调 用的字符串,完成异步传输。

    小结: 如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发 送给服务器端程序的格式。

     

    3.  服务器端的 JSON

    3.1   JSON 发给服务器

    a)         通过 GET 以名 称 /值对发送 JSON

    JSON 数据中会有空格和各种字符, Web 浏览器往往要尝试对其继续编译。要确保这些字符不会在服务器上(或者在将数据发送给服务器的过程中) 引起混乱,需要在 JavaScript escape()函数中做如下添加:

    var url = "organizePeople.php?people=" + escape (people.toJSONString());

    request.open(" GET ", url, true);

    request.onreadystatechange = updatePage;

    request.send(null);

     

    b)         利用 POST 请求发送 JSON 数据

    当决定使用 POST 请求将 JSON 数据发送给服务器时,并不需要对代码进行大量更改,如下所示:

    var url = "organizePeople.php?timeStamp=" + new Date().getTime();

    request.open(" POST ", url, true);

    request.onreadystatechange = updatePage;

    request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    request.send( people.toJSONString() );

     

    注意:赋值时格式必须是 var msg=eval('(' + req.responseText + ')');

     

    3.2   在服务器上解释 JSON

    a)       处理 JSON 的两步骤

    *   针对编 写服务器端程序所用的语 言,找到相应的 JSON 解析器 /工具 箱 /帮助 器 API

    *   使用 JSON 解析器 /工具 箱 /帮助 器 API 取得来自客户机的请求数据并将数据转变成脚本能理解的东西。  

    b)      寻找 JSON 解析器

    寻找 JSON 解析器或工具箱最好的资源是 JSON 站点。如果使用的是 Java servlet json.org 上的 org.json 包就是个不错的选择。在这种情况下,可以从 JSON Web 站点下载 json.zip 并将其中包含的源文件添加到项目构建目录。编译完这些文件后,一切就就 绪了。对于所支持的其他语言,同样可以使用相同的步骤;使用何种语言取决于您对该语言的精通程度,最好使用您所熟悉的语言。

    c)       使用 JSON 解析器

    一旦获得了程序可用的资源,剩下的事就是找到合适的方法进行调用。如果在 servlet 中使用的是 org.json 包,则会使用如下代码:

    public void doPost(HttpServletRequest request, HttpServletResponse response)

     throws ServletException, IOException {

     StringBuffer jb = new StringBuffer();

     String line = null;

     try {

        BufferedReader reader = request.getReader();

        while ((line = reader.readLine()) != null)

          jb.append(line);

     } catch (Exception e) { //report an error }

     try {

        JSONObject jsonObject = new JSONObject(jb.toString());

     } catch (ParseException e) {

        // crash and burn

        throw new IOException("Error parsing JSON request string");

     }

     // Work with the data using methods like...

     // int someInt = jsonObject.getInt("intParamName");

     // String someString = jsonObject.getString("stringParamName");

     // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName");

     // JSONArray arr = jsonObject.getJSONArray("arrayParamName");

     // etc...

    }

     

    4.  总结

    通过对 JSON 数据格式和使用方法的了解,完成在服务器端的 JSON 格式的数据的传输和解析,即完成了数据的异步传输。



     
    展开全文
  • JSON简介

    千次阅读 2017-08-14 23:22:08
    (一)什么是JSON (二)JSON的语法格式 (三)JSON的格式转换

    (一)什么是JSON

    JSON,Javascript Object Notation,JS对象标记,是一种取代XML的轻量级数据结构,一种具有特殊格式的字符串。
    由于格式简单,因而占用流量小,常用于网络数据传输。
    例如:

    {
        "name": "中国",
        "province": [{
            "name": "黑龙江",
            "cities": {
                "city": ["哈尔滨", "大庆"]
            }
        }, {
            "name": "广东",
            "cities": {
                "city": ["广州", "深圳", "珠海"]
            }
        }, {
            "name": "台湾",
            "cities": {
                "city": ["台北", "高雄"]
            }
        }, {
            "name": "新疆",
            "cities": {
                "city": ["乌鲁木齐"]
            }
        }]
    }

    (二)JSON的语法格式

    JSON的语法格式很简单,只是用不同的分隔符将数据分割开来,且只有五个分隔符。

    {} 双括号表示对象
    [] 中括号表示数组
    “” 双引号内是属性或值
    : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
    , 逗号表示对象分隔符

    根据语法解析上一部分的例子。
    JSON对象有两个属性:String类型的name和数组province.
    province数组中有4个成员,每个成员又有两个属性:String类型的name,cities对象。
    cities对象中存在唯一一个属性city,为String数组.

    (三)JSON的格式转换

    我们可以通过JSONObject和JSONArray完成数据的封装。

    例如,向服务器发送数据时,需要将相关数据封装成JSON格式,之后将JSON转换成String,作为HTTP/SOAP/MQTT的BODY传送出去。以第一部分的实例为例。

        private String generateJSONStr(){
            JSONObject china=new JSONObject();
            JSONArray provinceList=new JSONArray();
            JSONObject province;
            JSONObject cities;
            JSONArray city;
    
            try {
                province=new JSONObject();
                cities=new JSONObject();
                city=new JSONArray();
                province.put("name","黑龙江");
                city.put("哈尔滨");
                city.put("大庆");
                cities.put("city",city);
                province.put("cities",cities);
                provinceList.put(province);
    
                province=new JSONObject();
                cities=new JSONObject();
                city=new JSONArray();
                province.put("name","广东");
                city.put("广州");
                city.put("深圳");
                city.put("珠海");
                cities.put("city",city);
                province.put("cities",cities);
                provinceList.put(province);
    
                province=new JSONObject();
                cities=new JSONObject();
                city=new JSONArray();
                province.put("name","台湾");
                city.put("台北");
                city.put("高雄");
                cities.put("city",city);
                province.put("cities",cities);
                provinceList.put(province);
    
                province=new JSONObject();
                cities=new JSONObject();
                city=new JSONArray();
                province.put("name","新疆");
                city.put("乌鲁木齐");
                cities.put("city",city);
                province.put("cities",cities);
                provinceList.put(province);
    
                china.put("name","中国");
                china.put("province",provinceList);
    
                return china.toString();
    
            } catch (JSONException e) {
                e.printStackTrace();
                return null;
            }
        }

    相反,从服务器接收数据时,需要将JSON格式的String对象,转换成JSON对象。

        private JSONObject initJSON(String jsonStr){
            try {
                JSONObject country=new JSONObject(jsonStr);
                String countryName=country.getString("name");
                Log.i(TAG, "initJSON: country name is "+ countryName);
    
                JSONArray provinceList=country.getJSONArray("province");
                for (int indexProvince=0;indexProvince<provinceList.length();indexProvince++){
                    JSONObject province=provinceList.getJSONObject(indexProvince);
                    Log.i(TAG, "initJSON: province name is "+ province.getString("name"));
    
                    JSONObject cities=province.getJSONObject("cities");
                    JSONArray city=cities.getJSONArray("city");
                    for (int indexCity = 0; indexCity < city.length(); indexCity++) {
                        Log.i(TAG, "initJSON: city name is "+ city.getString(indexCity));
                    }
                }
    
                return country;
            } catch (JSONException e) {
                e.printStackTrace();
                return null;
            }
        }

    当然,加解密,完整性校验以及数据类型转换在传输过程中,也是必不可少的。由于本文重点记录JSON,因此暂时忽略。之后有机会,再将安全的部分总结。

    展开全文
  • json描述

    2017-06-05 11:41:33
    JSON 语法 JSON 语法是 JavaScript 语法的子集。 JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集。 数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 JSON 名称/值对 JSON ...
  • Json解析本地json文件

    千次阅读 2014-12-05 18:17:56
    最近遇到一个问题,将本地的Json文件解析出来。 下面我将实现思路和有关代码给大家一一列出来。 1、Json定义: ...JSON采用兼容很高的文本格式,同时也具备类似于C语言体系的行为。 2、json
  • 此脚本以一个或多个Halo帐户下载(以JSON格式)所有定义的文件完整性策略和防火墙策略。 运行此脚本,您可以存档所有当前策略的副本。 注意:此脚本当前不支持下载配置策略。 ##要求和依赖关系 Ruby安装在运行...
  • JavaEE的JSON API规范JSON-P/JSON-B

    千次阅读 2018-12-28 20:57:08
    从JavaEE 7开始,一个专门用于处理JSON数据的API被纳入JavaEE规范体系,这就是Java API for JSON Processing (JSON-P) 。...至此,与XML数据类似,JavaEE提供了完整的处理JSON数据的APIs。 目前,Glassfish为JSON-P...
  • json学习json解析demo

    千次阅读 2012-07-19 09:40:08
    JSON的定义:  一种轻量级的数据交换格式,具有良好的可读和便于快速编写的...JSON采用兼容很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同
  • 完整实现,包括对请求/响应批处理的支持。 该库是实验的,该API尚未被认为是稳定的。 jsonrpc2旨在提供类似于Go的标准net/http包的API。 jsonrpc2可与任何io.ReadWriter一起使用,这使您可以在从tcp和...
  • 校验数据完整性

    千次阅读 2020-07-16 10:09:50
    所有的模块的输入都需要进行数据完整性校验,需要增加如下的额外字段, 名称 字段 类型 是否必须 数据校验码 sign String 必须 ...
  • VB6 中使用JSON的类库,有完整示例工程。亲测可用,仅需5积分,比同类资源动辄几十分价比高多了。赶紧下载用吧。
  • package.json

    千次阅读 2015-08-16 15:04:26
    每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是...
  • JSON详解

    2015-02-09 20:41:41
    JSON的定义:  一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。...JSON采用兼容很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org JSON Vs XML 1.JSON和XML的数据可读
  • 1. 最近项目已经上线了 ,闲暇了几天 想将JSON的序列化以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的...JSON 是轻量级的文本数据交换格 ,JSON 独立于语言 ,JSON 具有自我描述,更易理
  • Json概述

    2010-10-27 10:55:00
    什么是JSONJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于ECMA262 语言规范(1999-12 第三版)中JavaScript 编程语言的一个子集。 JSON ...
  • JSON解析

    2012-10-23 23:00:33
    JSON定义:一种轻量级的数据交换格式,业内主流技术为其提供了完整的解决方案,从而可以在不同平台进行数据交换。不像html格式在有的浏览器上面不兼容 JSON VS XML 1、JSON和XML的数据可读性基本相同 2、JSON...
  • 如何保持json序列化的顺序

    千次阅读 2021-01-11 08:45:00
    作者:等你归去来cnblogs.com/yougewe/p/14258485.html目录保持json有序的思路保持json有序的应用场景举例fastjson维护json的有序的实现h...
  • JSONJSON入门详解(二)

    千次阅读 2020-03-18 18:17:47
    JSON入门详解——带你走进JSON的世界
  • go语言JSON处理

    万次阅读 2016-04-22 14:45:15
    JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,032
精华内容 49,612
关键字:

json完整性