Web - Json数据交换格式

前言

学习WEB避免不了数据的传递,而对于浏览器与服务器间数据传递,必定要有一个统一的格式,这个文本格式主流的就是Json

Json概述

JSON(JavaScript Object Notation)是一个用于数据交换的文本格式
类似与XML,它只是一种数据格式,可用于任何编程语言

  1. Json是key-value存储,key支持String,number,value支持大部分的类型
  2. Json本身是个字符串,只是有一种特定的格式,即所有符号这种格式的字符串,称为Json,而所有的语言都是支持字符串的,也就是Json可以用与任何编程语言
  3. Json用于数据交换,是一种轻量级的数据交换格式(那么XML就是重量级的数据格式)
  4. Json起源与JavaScript,JSON语法是javaScript语法的子集

Json语法

首先,我们知道Json的定义是一种数据交换的文本格式
而数据交换要考虑到交换的数据量和数据类型
也就是交换的数据必须是数组集合和对象

JavaScript中描述一个对象,用花括号{},描述一个数组用中括号[]

Json语法身为JavaScript的子集,自然也是这样

描述一个msg对象:

    var msg =  {
   	 	"name" : "zhangsan",
    	"id" : 123, 
    	"country" : "China"
    }

描述一个msg数组:

    var msg = [
        {"name" : "zhangsan", "id" : 123, "country" : "China"},
        {"name" : "lisi","id" : 1234,"country" : "US"},
    ]

格式是 : key : value 键值对的形式

Json始终只是一个数据格式,所说的Json对象是符合Json格式的一个JavaScript对象

注意事项

Json支持的数据类型:

  • Number:数字(整数或浮点数)
  • String:字符串(在双引号中),一定是英文双引号(""),个别弱语言可以支持单引号
  • Boolean:逻辑值(true 或 false)
  • Array:数组(在方括号中),一般是在Value位置上,[…]
  • Object:对象(在花括号中),一般是在Value位置上,{…}
  • null:空值

在Json的数据中,不能有引号、逗号、特殊运算符/、*、-、+、>>等等

Json语法规则是JavaScript的子集

在这里插入图片描述

Json获取元素值

Json语法是JavaScript的子集,可以简单的通过JS语法获得Json元素

<script>
    var data = {
        "name" : "zhangsan",
        "country" : "China"
    }

    alert(data.name+" - "+data.country)
</script>

在这里插入图片描述

但是前面说了,值也可以是Number型数据,而Number型数据就不能这样取
而是要data[1]或者data[“1”]

<script>
    var data = {
        "name" : "zhangsan",
        "country" : "China",
        "1" : "法外狂徒"
    }
    alert(data["1"])
</script>

转换

eval方法

eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本(JavaScript字符串),然后生成 JavaScript 对象

但是要用括号括起字符串:

<script>
    var data = '{"name":"zhangsan","country":"China"}';
    var jsonData = eval("("+data+")");
    alert(jsonData.name);
</script>

在这里插入图片描述

parse方法

JSON.parse()是Javascript中一个常用的 JSON 转换方法,它可以把符合Json语法的字符串转换成Json对象

<script>
    var data = '{"name":"zhangsan"}';
    alert(data.name);
    var jsonData=JSON.parse(data);
    alert(jsonData.name);
</script>

第一个弹出框是undefined,因为这是一个字符串,无法通过JS得到Json数据
在这里插入图片描述

parse转换后就是一个Json对象了

在这里插入图片描述

stringify方法

当然,也有将Json对象转换成符号Json规则的字符串的方法stringify


<script>
    var data = {"name":"zhangsan"};
    var jsonData=JSON.stringify(data)
    alert(jsonData.name)
    alert(jsonData);
</script>

第一个弹出框是underfined,说明转换后不是一个Json对象
在这里插入图片描述

这是一个字符串

在这里插入图片描述

stringify方法还可以转换Json字符串内容JSON.stringify(value[, replacer[, space]])

可以有3中参数
只是一个参数value,即要转换的Json对象

var jsonData=JSON.stringify(data)

两个参数:replacer参数可以是function,也可以是Array

如果replacer参数是function
function可以带两个参数:key和value,且返回值

  • 如果返回一个 Number, 转换成相应的字符串被添加入JSON字符串
  • 如果返回一个 String, 该字符串作为属性值被添加入JSON
  • 如果返回一个 Boolean, “true” 或者 "false"被作为属性值被添加入JSON字符串
  • 如果返回undefined,该属性值不会在JSON字符串中输出
    在这里插入图片描述
<script>
    var data = {"name":"zhangsan","country":"China"};
    var jsonData=JSON.stringify(data,function (key, value) {
        if (key == "name"){
            value = "法外狂徒"
        }
        return value;
    })
    alert(jsonData)
</script>

在这里插入图片描述

stringify方法会判断我们Json的每个key-value键值对

如果参数replacer是一个数组
结果集的Key只输出命中的,miss的属性过滤

<script>
    var data = {"name":"zhangsan","country":"China"};
    var jsonData=JSON.stringify(data,["name"]);
    alert(jsonData);
</script>

在这里插入图片描述

第三个参数space是美化输出Json的
但是要使用第三个参数必须带上第二个参数

  1. space是数字,表示每个元素间隔
<script>
    var data = {"name":"zhangsan","country":"China"};
    var jsonData=JSON.stringify(data,null,2);
    alert(jsonData);
</script>

在这里插入图片描述

  1. space是‘tab’定制空格美化输出,采用“\t”
var jsonData=JSON.stringify(data,null,"\t");

在这里插入图片描述

  1. space是字符串,增加固定的字符串
var jsonData=JSON.stringify(data,null,"hello");

在这里插入图片描述

轻量级数据交换格式

为什么说Json是轻量级的数据交换格式?为什么说XML是重量级的数据交换格式?

Json数据格式比较简单,易于读写,格式都是压缩的,占用带宽小,不像XML格式存在的各种标记,文件庞大,文件格式复杂,传输占带宽

用一个例子展现:
一本书对象:需要有 书名name,作者对象author,价格price
作者对象需要描述 作者名authorName , 成就 achievement
Json表示:

    var book = {
        "name" : "时间简史",
        "author" : {
            "authorName" : "霍金",
            "achievement" : "physicist"
        },
        "price" : 100
    }

而在XML中:

<book>
    <name>时间简史</name>
    <author>
        <authorName>霍金</authorName>
        <achievement>physicist</achievement>
    </author>
    <price>100</price>
</book>

各种标签
不仅仅是这样,对于XML还有约束,如price要是数字且非空等等,需要写一个约束文件,而且解析XML文件又要花费时间(dom4j、Xpath、Jsoup等等),且不说不同的浏览器的解析方式是否不同
而Json本身就是一串字符串,要解析太简单了,且没有各种标签规范

关于XML的一些基础可以看
真的了解XML吗? - XML 基础
真的了解XML吗? - XML解析方式

所以Json渐渐的成为主流的数据交换格式

因为,我毕竟是搞Java后端的,对Json的了解复习大致就这些,Json还有很多值得深究的地方

发布了121 篇原创文章 · 获赞 31 · 访问量 7869

猜你喜欢

转载自blog.csdn.net/key_768/article/details/105385638