精华内容
下载资源
问答
  • contentType: "application/json;charset=utf-8", data:datas, error:function(data){ alert(data.password); } }) }) }) ajax date 为空 ``` ``` @RequestMapping("/...
  • json2html:将JSON对象转换为HTML

    千次阅读 2013-05-29 22:43:13
    json2html是一个基于JavaScript的HTML模板库,顾名思义,该库主要用于将JSON对象转换为HTML格式。 使用json2html进行JSON转换,需要先通过JSON模板来指定转换格式,比如使用转换对象的名称值或属性值作为DOM HTML...
    json2html是一个基于JavaScript的HTML模板库,顾名思义,该库主要用于将JSON对象转换为HTML格式。
     
    


    使用json2html进行JSON转换,需要先通过JSON模板来指定转换格式 ,比如使用转换对象的名称值或属性值作为DOM HTML元素的属性。以下是几个预留的属性名: 

    • tag:指定DOM元素的类型(div、span等)
    • html:指定DOM元素需要包含的内容
    • children:指定DOM元素的下一级内容
    示例:  

    Json代码  
    1. var transform = {'tag':'li','html':'${name} (${age})'};  
    2.   
    3. var data = [  
    4.       {'name':'Bob','age':40},  
    5.       {'name':'Frank','age':15},  
    6.       {'name':'Bill','age':65},  
    7.       {'name':'Robert','age':24}  
    8. ];  
    9.   
    10. document.getElementById('list').innerHTML = json2html.transform(data,transform);  


    结果如下:  

    Html代码  
    1. <ul id="list">  
    2.     <li>Bob (40)</li>  
    3.     <li>Frank (15)</li>  
    4.     <li>Bill (65)</li>  
    5.     <li>Robert (24)</li>  
    6. </ul>  

    json2html提供了以下两种形式,以便在服务器端和客户端都能使用:  

    • jQuery插件形式:扩展了jQuery的核心库,包含了jquery事件
    • node.js包形式:可用于基于node.js的web服务器
    项目官网: http://json2html.com/
    展开全文
  • 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>
    
    展开全文
  • java中关于json传图片的方法

    千次阅读 2016-12-28 11:23:10
    一般来说图片可以以流的形式来传输,即便是用json传输,一般也都是一个地址,而图片都存在服务器上,然后顺着地址发送请求下载图片。  但是这次公司的项目中,图片是存在oracle数据库中的blob字段的,并没有...

    本文转自:http://www.cnblogs.com/yxy2016/articles/5509095.html


    一般来说传图片可以以流的形式来传输,即便是用json传输,一般也都是传一个地址,而图片都存在服务器上,然后顺着地址发送请求下载图片。

      但是这次公司的项目中,图片是存在oracle数据库中的blob字段的,并没有存在服务器上,也就是说我必须传图片本身过去,而json是无法传输二进制的文本格式,因此我就想将图片转为字符串形式传输,然后对方再解码然后转换回来就行了。

      我的方法分三个步骤:

        1.将图片转为字节数组

        2.将字节数组转为字符串

        3.压缩字符串,放入json传输

      首先是第一步,将图片转为字节数组,代码如下:

    复制代码
    复制代码
     1 /**
     2 * 将图片转换为字节数组
     3 * @return  4 */  5 private byte[] loadImage(File file){  6 //用于返回的字节数组  7 byte[] data=null;  8 //打开文件输入流  9 FileInputStream fin=null; 10 //打开字节输出流 11 ByteArrayOutputStream bout=null; 12 try{ 13 //文件输入流获取对应文件 14 fin=new FileInputStream(file); 15 //输出流定义缓冲区大小 16 bout=new ByteArrayOutputStream((int)file.length); 17 //定义字节数组,用于读取文件流 18 byte[] buffer=new byte[1024]; 19 //用于表示读取的位置 20 int len=-1; 21 //开始读取文件 22 while((len=fin.read(buffer))!=-1){ 23 //从buffer的第0位置开始,读取至第len位置,结果写入bout 24 bout.write(buffer,0,len); 25  } 26 //将输出流转为字节数组 27 data=bout.toByteArray(); 28 //关闭输入输出流 29  fin.close(); 30  bout.close(); 31 }catch(Exception e){ 32  e.printStackTrace(); 33  } 34 return data; 35 }
    复制代码
    复制代码

      然后是第二步,将字节数组转为字符串

    复制代码
    复制代码
     1 /**
     2 * 把字节数组转化为字符串----"ISO-8859-1"
     3 * @param date  4 * @return  5 */  6 private String byteToString(byte[] data){  7 String dataString=null;  8 try{  9 //将字节数组转为字符串,编码格式为ISO-8859-1 10 dataString=new String(data,"ISO-8859-1"); 11 }catch(Exception e){ 12  e.printStackTrace(); 13  } 14 return dataString; 15 }
    复制代码
    复制代码

      接下来就是最后一步,将字符串压缩后返回

    复制代码
    复制代码
     1 /**
     2 * 压缩字符串----"ISO-8859-1"
     3 * @param data  4 * @return  5 */  6 private String compress(String data){  7 String finalData=null;  8 try{  9 //打开字节输出流 10 ByteArrayOutputStream bout=new ByteArrayOutputStream(); 11 //打开压缩用的输出流,压缩后的结果放在bout中 12 GZIPOutpuStream gout=new GZIPOutputStream(bout); 13 //写入待压缩的字节数组 14 gout.write(data.getBytes("ISO-8859-1")); 15 //完成压缩写入 16  gout.finish(); 17 //关闭输出流 18  gout.close(); 19 finalData=bout.toString("ISO-8859-1"); 20 }catch(Exception e){ 21  e.printStackTrace(); 22  } 23 return finalData; 24 }
    复制代码
    复制代码

      以上就是我所用的方法,有些不熟悉的地方习惯于一句话一个注释算是我的习惯吧,可能会让人看起来比较乱,请不要介意,而且有些注释都是我自己猜测的,并不一定准确,如果错了还请指出来,谢谢了!

      然后说下我当时写这方法的一些琐碎的事情吧,当时一开始我确实是想着转字符串传输,但是毕竟没写过,因此也在网上查阅过,百度上很多都说转 Base64格式字符串传输,我试了很多遍,然而可能是我哪里写的不对,导致一直没有成功,我的测试方法是从数据库中取出那个blob字段的数据,然后经 过转化压缩,然后在本地生成一个图片,但是最终我发现那个图片都是打不开的,提示文件错误或损坏,并且图片大小也有点怪异,估计是我哪里代码写的不对吧。

      然后我就干脆不转Base64了,但是不设置编码格式肯定是不行的,后来又在aawwmate的博客中看到了一个转载的文章,也是关于json传输图片的,看完后我就按照那篇文章中说的用ISO-8859-1格式来传输,确实就成功了,在此万分感谢。

      相信大家在代码中也看见了那个压缩字符串的时候,实际上是将字符串转为字节数组压缩完后又转为字符串的吧,为什么要多此一举,不直接将字节数组 压缩后再转为字符串呢,这方面其实我自己也想过,但是我试了还是老样子,就是本地生成的图片打不开,以后有时间再去试试能不能改改看。

      关于压缩的话我当时测试了下,实际上是对于小图片是会导致图片变大的,当时好像测试的是一个3k的原图片,经过上面三个步骤以后,在本地解码解压转换生成的图片却是5k的,但是我又试了一个17k的图片,最终生成的图片是10k的,也就是说压缩还是可取的。


    展开全文
  • 今天尝试着用thymeleaf写马上就要使用的计算机基础知识大赛的比赛系统,然后卡在如何将多个对象通过form表单发送给后端,最后没有找到比较好的办法,只能使用js将需要发送的数据转化成Json然后使用ajax发送请求。...

    今天尝试着用thymeleaf写马上就要使用的计算机基础知识大赛的比赛系统,然后卡在如何将多个对象通过form表单发送给后端,最后没有找到比较好的办法,只能使用js将需要发送的数据转化成Json然后使用ajax发送请求。然后在后台在将数据转化成实体类

    首先我们的实体类如下:
    package com.njupt.sacc.cbkc.problem.entity;
    
    public class ProblemResult {
    
        private Integer id;
        private Integer uid;
        private Integer pid;
        private String result;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getUid() {
            return uid;
        }
    
        public void setUid(Integer uid) {
            this.uid = uid;
        }
    
        public Integer getPid() {
            return pid;
        }
    
        public void setPid(Integer pid) {
            this.pid = pid;
        }
    
        public String getResult() {
            return result;
        }
    
        public void setResult(String result) {
            this.result = result;
        }
    
        @Override
        public String toString() {
            return "ProblemResult{" +
                    "id=" + id +
                    ", uid=" + uid +
                    ", pid=" + pid +
                    ", result='" + result + '\'' +
                    '}';
        }
    }
    
    然后我们的目标就是前端向后端发送多个ProblemResult对象,然后在进行处理,首先我们看前端的实现方案(此时后端向前端发送的是一个List):
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    
    </head>
    <body>
    <hr>
    <div th:each="problem : ${problems}">
        <span th:text="${problem.id}"></span>
        <form th:object="${problem}" th:if="${problem.isSingle == 1}">
            <input type="radio" th:name="${problem.id}" th:text="${problem.aOption}" value="a">
            <input type="radio" th:name="${problem.id}" th:text="${problem.bOption}" value="b">
            <input type="radio" th:name="${problem.id}" th:text="${problem.cOption}" value="c">
            <input type="radio" th:name="${problem.id}" th:text="${problem.dOption}" value="d">
        </form>
        <form th:object="${problem}" th:if="${problem.isSingle == 0}">
            <input type="checkbox" th:name="${problem.id}" th:text="${problem.aOption}" value="a">
            <input type="checkbox" th:name="${problem.id}" th:text="${problem.bOption}" value="b">
            <input type="checkbox" th:name="${problem.id}" th:text="${problem.cOption}" value="c">
            <input type="checkbox" th:name="${problem.id}" th:text="${problem.dOption}" value="d">
        </form>
        <hr>
    </div>
    <button name="save" onclick="loadXMLDoc(name)">保存</button>
    <button name="push" onclick="loadXMLDoc(name)">提交</button>
    
    <script type="text/javascript">
        //将答案转化成Json格式
        //name用来判断是保存操作还是提交操作
        function f(name) {
            var json = [];
            //[[$[count]]]为thymeleaf中js获取值的方法
            var count = [[${count}]];
            for (var i = 1; i <= count; i++) {
                var type = document.getElementsByName(i).item(0).getAttribute("type");
                //js获取单选框的值
                if (type == "radio") {
                    var radio = document.getElementsByName(i);
                    var result = "";
                    for (var j = 0; j < radio.length; j++) {
                        if (radio[j].checked) {
                            result = radio[j].value;
                            break;
                        }
                    }
                } else {//js获取多选框的值
                    var checkbox = document.getElementsByName(i);
                    var result = "";
                    for (var j = 0; j < checkbox.length; j++) {
                        if (checkbox[j].checked)
                            result = result + checkbox[j].value;
                    }
                }
                var row = {"pid": i, "result": result};
                json.push(row);
            }
            return {"type":name,"data":json};
        }
        //发送ajax请求
        function loadXMLDoc(name) {
            var xmlhttp;
            if (window.XMLHttpRequest) {
                //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                xmlhttp = new XMLHttpRequest();
            } else {
                // IE6, IE5 浏览器执行代码
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    console.log("successful");
                }
            };
            xmlhttp.open("POST", "/test", true);
            xmlhttp.setRequestHeader("Content-Type", "application/json");
            var data = f(name);
            xmlhttp.send(JSON.stringify(data));
        }
    </script>
    </body>
    </html>
    
    传送的数据示例大致如下:
    {
    	"submit":[
    		{"pid":1,"result":"a"},
    		{"pid":2,"result":"ab"},
    		{"pid":3,"result":""},
    		{"pid":4,"result":"abcd"},
    		{"pid":5,"result":"a"},
    		{"pid":6,"result":"d"},
    		{"pid":7,"result":"b"},
    		{"pid":8,"result":"c"}
    	],
    	"type":"save"
    }
    
    之后我们看后端如何获取数据并将数据转化成实体类:
    @RequestMapping("/test")
        public String submit(@RequestBody JSONObject jsonObject){
            //通过key获取前端发送的json的数组
            JSONArray problemResults = jsonObject.getJSONArray("data");
            //通过key获取前端发送的json中的type字段
            String submitType = String.valueOf(jsonObject.get("type"));
            List<ProblemResult> list = new ArrayList<>();
            //通过遍历将json数据中的数据转化成实体类
            for (Object problemResult : problemResults) {
                //会用JSONObject包中的函数将字符串转化成实体类
                ProblemResult result = (ProblemResult) JSONObject.toJavaObject((JSONObject) problemResult, ProblemResult.class);
                list.add(result);
            }
            return "index";
        }
    

    经过上面的操作,我们就成功的完成了前端向后端发送多个对象,整体思想大概就是先把需要传的所有对象看成一个数组,然后传到后端之后再对json数据进行解析,然后获取数据中的json字符串,然后通过json库中的函数将json字符串转化成实体类,全部完成

    参考博文:

    阿里巴巴的JSONObject对象转换 https://blog.csdn.net/a990914093/article/details/81217581
    JSONObject如何转换成实体类型
    https://blog.csdn.net/m0_38129335/article/details/80047034
    json数据与实体类之间的相互转换
    https://blog.csdn.net/nandao158/article/details/71122851

    展开全文
  • xml,json,html格式化工具

    千次下载 热门讨论 2012-03-25 13:58:48
    xml,json,html格式化工具
  • jsp接受通过JSON传来的数据

    万次阅读 2014-12-18 09:43:33
    json,java,jquery,ajax
  • HTML JSON解析

    千次阅读 2018-09-06 08:48:09
    JSON JSON全程为JavaScript Object Notation。是一种dulde语言。 被用作一种数据交换格式; 常表现为字符串的样式; 语法:将js中的对象写成... JSON.parse(后台过来的数据):把JSON字符串转换成js数据,如存...
  • jQuery使用Ajax将json传至php处理

    千次阅读 2018-10-07 13:03:10
    这是一个将html页面的登录信息通过ajax使用json数据发送给php页面,php将数据处理后又将数据传回html页面显示 js代码 &lt;script type="text/javascript"&gt; $(function(){ $("#btn&...
  • JSONHTML之间互转实现

    千次阅读 2020-05-19 21:46:15
    主要实现功能htmljson,再由json恢复html 可去除 style 和 script 标签 将行内样式转换为 js object 将 class 转换为数组形式 主要依赖于 htmlparser2 ; 这是一个性能优越、功能强大的 html 解析库 直接上代码 ...
  • Json传字符串中文问题解决方案

    千次阅读 2016-12-09 20:30:59
    之前做项目时遇到了后台向前台传json时,中文乱码问题,后来得到解决 下面是代码 (项目中用到了阿里巴巴的包) package com.neusoft.resume.minority.controller; import java.util.List; import ...
  • 这个Vue搞得挺不错,简单...HTML页面中使用JQuery的$.getJSON()方法加载JSON数据 JSON数据加载完毕后实例化Vue对象并将数据渲染到HTML页面中 PHP读数据库返回JSON的过程就不细说了,直接来看HTML代码吧 <!DOCTYPE html
  • 后台json 数据遍历到HTML 页面

    万次阅读 2018-01-30 10:54:37
    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加...1、HTML页面 [html] view plain copy > html> head> meta charset="utf-8"> title>xx信息查询title> script ty
  • html中如何美化展示json格式数据

    万次阅读 2018-06-08 19:41:46
    直接上代码:html中主要加一个pre 的标签&lt;h2&gt;GeoJsonTxt示例如下:&lt;/h2&gt; &lt;div&gt; &lt;h4&gt;注意:示例中&lt;span style="color:red"&gt;...
  • html table 转json

    千次阅读 2018-01-19 11:20:21
    html table 转json max.bai 2018-01   最近django做接口平台,前端需要table转json格式,自己写了一个,记录一下   1. html table 设置 首先规范table格式 a. table一定要有thead th,tbody b. 每个th 要...
  • 将Java中的json数据html界面

    千次阅读 2015-01-15 17:06:11
    用servlet中out.print(s);在界面上的数据获取的代码为$.ajax({ type: "post", url: "/newspider/test.do", //data: "name=" + $("#Text1").val(), success: function (result) { alert(result);...
  • JSONHTML的标签存放json-yellowcong

    千次阅读 2017-09-18 10:06:22
    有时候,我们需要将项目传递过来的json对象,放在界面的html表单中,但是由于html的value直接存储不了json数据,是由于html解析,不会识别转义符,只会将双赢号的数据作为value值,当JSON字符串,直接放到value里面...
  • HTML引用外部json文件

    千次阅读 2020-03-20 17:34:52
    我是在hubuilder里试的,先是新建data.json文件。里面写上内容。其中var dataFromJSON是为了方便引用。 var dataFromJSON = { "text":"外部json", "iconCls":"fa fa-wpforms", "state":"open", ...
  • HttpURLConnection传JSON数据

    千次阅读 2019-04-03 19:05:52
    参考网址:https://www.cnblogs.com/duelsol/p/5128271.html try { //创建连接 URL url = new URL(url); HttpURLConnection connection = (HttpURLConnection) url.openConnectio...
  • //前端后端json字符串 var aa = JSON.stringify(data.Data); //console.log(aa); aa = encodeURIComponent(aa);//控件没有好的传参方式 LayerOpen("添加", 95, 90, '/S...
  • json传递含有htmljson

    千次阅读 2017-07-06 16:16:49
    $list[$key]['content'] = htmlspecialchars($value['content']); echo '{"msg":"获取成功!","data":'.json_encode($list).',"status":"1"}';
  • HTML5 Json解析

    千次阅读 2015-06-30 15:26:40
    HTML5已原生支持json的解析,window.JSON.parse()将json格式字符串转换为json对象,window.JSON.stringify()将json对象转换为json格式字符串。   示例: Html代码  >  html>  head> ...
  • java向前端传json和前端对json的解析应用
  • HTML/JavaScript中引入json文件

    千次阅读 2020-06-08 17:15:54
    HTML/JavaScript中引入json文件 有2种引入方式: 使用<script >标签引入 使用ajax获取json 使用<script>引入 在json文件中定义一个变量指向这个json数据。 var jsonData = { //... }; 在HTML...
  • HTML前端接收JSON数据

    千次阅读 2019-11-09 12:13:18
    从以上数据显示,前端已经拿到了后台发送过来的JSON数据,但遍历报错 对接收到的数据不再进行格式化处理,即不使用JSON.parse()格式化数据,因为后台发过来的数据已经JSON格式化了,直接传值即可。 ...
  • springMVC利用json传数据到前台(二)

    万次阅读 2014-05-22 21:04:20
    本文是本人在学习网络视频springMVC的过程中的学习笔记。 本文是记录从后台
  • var data=[ { 'name':'名称', 'id':'id', 'type':1, 'paras':[ { 'paraname':'图片名称', 'url': '', ...例如这个json, 怎么在html用如下格式展现出来 name=名称 id=id type=1 paras:paraname=图片名称 . . .
  • htmlJSON格式化输出

    千次阅读 2017-10-09 15:35:37
    今天做一个API后台管理系统新增了日志模块,我是把操作的数据直接存入mongo数据库的,mongo是存入的json格式但是我想输出存入的操作详情到页面一直是很乱的格式,我想按照mongo的格式输出找了很久找到了解决方法: ...
  • JSON 语法之JSON null

    万次阅读 2018-06-08 15:05:53
    :null }关于作者歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、...
  • JSON语法之JSON数组

    万次阅读 2018-06-07 14:49:10
    JSON数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。如图 1‑5所示:图1-5 JSON数组JSON 数组:JSON 数组在中括号中书写。JSON 中数组值必须...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 871,510
精华内容 348,604
关键字:

json传html