精华内容
下载资源
问答
  • Spring Boot默认使用JackJson作为json转换器,用于生成JSON格式数据,有时候它格式化的日期/日期时间(LocalDate/LocalDateTime)字段并不符合产品的需求,因此需要对它返回的json中的日期日期时间类型的字段做...

    Spring Boot默认使用JackJson作为json转换器,用于生成JSON格式数据,有时候它格式化的日期/日期时间(LocalDate/LocalDateTime)字段并不符合产品的需求,因此需要对它返回的json中的日期和日期时间类型的字段做自定义格式处理。

     

    1、在字段上使用@JsonFormat

    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthday;  // 生日
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime; // 系统写入时间

    这种方式很灵活,但是由于我使用了MyBatis Generator自动生成数据层代码,不能修改自动生成的Model类,因为随时有可能会删除掉这份MyBatis Generator生成的数据层代码,然后重新再生成一份。

     

    2、在application.properties 统一配置

    (1)处理非Java 8的日期类型

    非Java 8的日期和日期时间类型,可以在application.properties做如下配置,全局范围控制日期时间的格式化

    spring.jackson.time-zone=GMT+8
    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    #spring.jackson.serialization.write-dates-as-timestamps=false

    (2)处理Java 8的日期类型

    上述第一种配置对Java 8类型的日期和日期时间(LocalDate、LocalDateTime)不起效,只能处理遗留的日期格式(如java.util.Date),如果要处理Java 8的日期类型,需要在Spring Boot的SpringMvc配置类中定义Jackson的日期转换格式,如下所示:

    /**
     * @author 李海林 手机:13802780104|微信:lihailin9073|Email:767679879@qq.com
     * @copyright 个人开发者李海林版权所有,产品详情及技术服务请登录官网查询[http://www.x-core.org.cn]
     * @create 2019-08-20 18:26
     */
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        private static final String dateFormat = "yyyy-MM-dd";
        private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";
        @Bean
        public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
            return builder -> {
                builder.simpleDateFormat(dateTimeFormat);
                builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
                builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
            };
        }
        
    }

    这样定义之后,所有被Jackson转换为json格式的日期和日期时间都会统一按照上述代码定义的格式进行处理。

     

    3、自定义JSON转换器来处理日期格式

    通过自定义JSON转换器,去掉Spring Boot默认的Jackson-databind,引入FastJson作为新的JSON转换器,然后在自定义FastJson转换器的时候对日期时间进行格式化处理

    (1)在pom中引入FastJson并屏蔽more的Jackson-databind

    
            <!-- 在引入web依赖时,屏蔽掉jackson转换器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-databind</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- 引入fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.48</version>
            </dependency>

    (2)配置 fastjson 的 HttpMessageConverter

    package cn.org.xcore.edusys.config;
    
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.nio.charset.Charset;
    
    /**
     * FastJson配置类
     *
     * @author 李海林 手机:13802780104|微信:lihailin9073|Email:767679879@qq.com
     * @copyright 个人开发者李海林版权所有,产品详情及技术服务请登录官网查询[http://www.x-core.org.cn]
     * @create 2019-08-29 21:35
     */
    @Configuration
    public class InitFastJsonConfig {
    
        @Bean
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter () {
            FastJsonHttpMessageConverter converter= new FastJsonHttpMessageConverter();
    
            // 创建FastJson转换器的配置
            FastJsonConfig config = new FastJsonConfig();
            config.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置日期格式
            config.setCharset(Charset.forName("UTF-8")); // 设置编码格式
    
    
            converter.setFastJsonConfig(config);
    
            return converter;
        }
    
    }
    

    通过这两步的配置,就启用了FastJson作为json转换器,并且设置了日期的格式为 yyyy-MM-dd HH:mm:ss

     

     

    订单

    展开全文
  • json-lib 日期处理类的一些用法

    千次阅读 2017-01-21 20:38:25
    今天继续研究基于S2SH的网上商城项目,其中涉及了json-lib中日期处理类的一些用法,现在讲解如下: 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.commons-...

    今天继续研究基于S2SH的网上商城项目,其中涉及了json-lib中日期处理类的一些用法,现在讲解如下:

    要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:

    1.commons-lang.jar
    2.commons-beanutils.jar
    3.commons-collections.jar
    4.commons-logging.jar
    5.ezmorph.jar
    6.json-lib-2.2.2-jdk15.jar

    我写了以下测试类:

    package netSfJson;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonValueProcessor;
    
    /*
    JsonValueProcessor接口:
    每个属性的自定义序列化的基本接口。
    http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/processors/JsonValueProcessor.html
    */
    public class DateJsonTest implements JsonValueProcessor {
    	
    	 public static final String Default_DATE_PATTERN = "yyyy-MM-dd";
    	 private DateFormat dateFormat;
    	 
    	 public DateJsonTest(String datePattern) {  
    	    try {  
    	        dateFormat = new SimpleDateFormat(datePattern);  
    	    } catch (Exception e) {  
    	        dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);  
    	    }  
        }  
    	 
    	 //processArrayValue:处理值并返回一个合适的JSON值。
    	@Override
    	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
    		// TODO Auto-generated method stub
    		return process(value);
    	}
    	//processObjectValue:处理值并返回一个合适的JSON值。
    	@Override
    	public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
    		// TODO Auto-generated method stub
    		return process(value);
    	}
    	
    	private Object process(Object value) {
    		// TODO Auto-generated method stub
    		return dateFormat.format((Date) value);
    		/*
    		format
    		将日期格式化为日期/时间字符串。
    		*/
    	}
    
    	
    
    }
    


    package netSfJson;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import net.sf.json.JSONObject;
    import net.sf.json.JsonConfig;
    
    public class testDateJson {
    
    	
    	
    	/**
    	 * @param args
    	 * @author Handsome_fan
    	 */
    	public static void main(String[] args) {
    		/*
    		 public interface Map<K,V>
    		 Map是一个接口
    		 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 
    		 */
    		/*
    		HashMap
    		基于哈希表的 Map接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。	
    		*/
    		//构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
    		Map<String, Object> map = new HashMap<String, Object>();
    		map.put("time", new Date());
    		map.put("name", "fyh");
    		map.put("age", 22);
    		//JsonConfig提供了在对一个Json串和Java对象进行互转时,有选择性的过滤掉一些属性值的方法
    		JsonConfig config = new JsonConfig();
    		/*
    		注册一个JsonValueProcessor[Java--->JSON]
    		public void registerJsonValueProcessor(java.lang.Class propertyType,
                                  JsonValueProcessor jsonValueProcessor)
            propertyType-要用作键的属性类型
            jsonValueProcessor-进行注册是处理器
    		*/
    		config.registerJsonValueProcessor(Date.class, new DateJsonTest("G yyyy-MM-dd hh:mm:ss.SS zzz ZZZ w DDD FF EE"));
    		/*
    		G 纪年术语
    		yyyy-MM-dd hh:mm:ss.SS 很简单不用解释
    		zzz	一般时区
    		ZZZ RFC 822时区
    		w 年中的周数
    		DDD 年中的天数
    		FF 月份中的星期
    		EE 星期中的天数
    		*/
    		JSONObject Obj = JSONObject.fromObject(map, config);
    		/*
    		JSONObject是名称/值对的无序集合。
    		它的外部形式是一个用大括号括起来的字符串,在名称和值之间有冒号,值和名称之间有逗号。
    		内部形式是具有用于通过名称访问值的get和opt方法的对象,以及用于通过名称添加或替换值的方法。
    		值可以是以下任何类型:Boolean,JSONArray,JSONObject,Number,String或JSONNull对象。
    		JSONObject构造函数可以用于将外部表单JSON文本转换为内部表单,其值可以使用get和opt方法检索,或者使用元素和toString方法将值转换为JSON文本。
    		get方法能够获取存在的值,如果获取一个不存在的值将会抛出异常
    		opt方法返回默认值,而不是抛出异常,因此对于获取可选值很有用。
    		API文档:http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONObject.html
    		*/
    		/*
    		fromObject(Object object, JsonConfig jsonConfig)
    		 创建一个JSONObject
    		 检查对象类型以调用正确的JSONObject工厂方法。 接受JSON格式的字符串,Maps,DynaBeans和JavaBeans。
    		*/
    		System.out.println(Obj);
    	}
    
    }
    

    运行结果如下:




    展开全文
  • 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语法

    2020-03-27 22:58:42
    JSON键/值对由键和值组成,键必须是字符串,值可以是字符串(string)、数值(number) 、对象(object)、数组(array)、true、false、null。如图 1‑1所示: 图1-1 JSON的值 在定义JSON键/值时,先是键名,后面...

    JSON 键/值对

    JSON键/值对由键和值组成,键必须是字符串,值可以是字符串(string)、数值(number) 、对象(object)、数组(array)、true、false、null。如图 1‑1所示:

    JSON的值

    图1-1 JSON的值

    在定义JSON键/值时,先是键名,后面写一个冒号,然后是值。如:

    1. "github": "https://github.com/"

    这就等价于这条 JavaScript 语句:

    1. github = "https://github.com/"

    JSON 字符串

    JSON 的字符串(string)跟C或者Java的字符串非常相似,是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。如图 1‑2所示:

    JSON字符串

    图1-2 JSON字符串

    由于JSON 字符串不能使用单引号,因此一个字符(character)就是一个单独的字符串(character string)。

    JSON 数值

    JSON 数值(number)与C或者Java的数值非常相似,支持整型、浮点型,浮点型也可以用指数表示。如图 1‑3所示:

    JSON数值

    图1-3 JSON数值

    JSON不支持八进制和十六进制, 数值必须以十进制表示,且不能使用NaN和Infinity。以下是合法的JSON数值:

    { "age": 30 } 

    JSON 对象

    JSON 对象是一个无序的key/value对的集合。一个对象以 '{' 开始,以 '}' 结束;每个key 和 value 中使用冒号分隔;每个 key/value 对之间使用逗号分隔。如图 1‑4所示:

    JSON对象

    图1-4 JSON对象

    JSON 对象语法:

    • JSON 对象在大括号({})中书写。
    • 对象可以包含多个key/value(键/值)对。
    • key是字符串,必须放在双引号里面。value 可以是合法的 JSON 数据类型(字符串, 数值, 对象, 数组, 布尔值或 null)。
    • 一个 key/value 对内部,key 和 value使用冒号(:)分隔。
    • key/value 对之间,使用逗号(,)分隔。
    • JSON 对象可以嵌套

    下面就是一个合法的JSON 对象:

    1. {
    2.   "weibo": "https://weibo.com/" ,
    3.   "github": "https://github.com/" ,
    4.   "qq": {
    5.     "number": "376601179",
    6.     "email": "376601179@qq.com"
    7.   }
    8. } 

    JSON 数组

    JSON数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。如图 1‑5所示:

    JSON数组

    图1-5 JSON数组

    JSON 数组:

    • JSON 数组在中括号中书写。
    • JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数值, 对象, 数组, 布尔值或 null),也可以是 JavaScript 的表达式,包括函数、日期、undefined。

    对象的属性值也可以是一个JSON数组。如,以下对象的 sites 属性值是一个包含三个元素的数组:

    1. {
    2.   "name": "网站",
    3.   "num": 3,
    4.   "sites": [ "Google.com", "Taobao.com", "Waibo.wang" ]
    5. }

    使用索引值来访问数组的元素。如:

    1. x = myObj.sites[2];   // "Waibo.wang"

    JSON数组的元素也可以是对象。如,以下对象 "employees" 是包含三个对象的数组,每个对象代表一条关于某人(有姓和名)的记录:

    1. {
    2. "employees": [
    3. { "firstName":"John" , "lastName":"Doe" },
    4. { "firstName":"Anna" , "lastName":"Smith" },
    5. { "firstName":"Peter" , "lastName":"Jones" }
    6. ]
    7. }

    JSON 布尔值

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

    { "flag":true }

    JSON null

    JSON 可以设置 null 值。如:

    { "zhihu":null }

    JSON 文件

    • JSON 文件的文件类型是 ".json"
    • JSON 文本的 MIME 类型是 "application/json"

    关于作者

    歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

     

    展开全文
  • JSON格式的日期[xx-xx-xx]解析1.前言2.解析json数据 补充:上篇提到的json数据引用如下(上篇提到json数据解析异常处理方式)   JavaScript解析不规范json数据思路(未按约定传值解析) { "tag...
  • Json

    2019-04-16 22:00:07
    JSON: 是JavaScriptObjectNotation(JavaScript 对象表示法),它是一种数据交换格式。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。 JSON基础结构 因为JSON使用...
  • 命名日 在json和YAML中命名天。 匈牙利名字日 我将匈牙利名字天放在文件中,日期,格式为0000-HH-NN 。 去做 将其提供给其他庆祝名字纪念日的国家。
  • json

    千次阅读 2013-08-13 17:29:18
    Java转json工具类说明文档 在公版原型项目中,前台使用Ext框架进行数据展示,由于Ext框架的特性是对AJAX的完美支持,所以在项目中前台与后台的交互基本是通过AJAX实现,使页面无刷新。 大多的Ajax框架的数据交互都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,732
精华内容 10,292
关键字:

json键是日期