天天看点

JSON的使用、规则、地理位置、序列化/反序列化

一、json是什么?

JSON,全称是Javascript Object Notation,即Javascript对象标记法

JSON是一种轻量级(Light-Weight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。

JSON的名称中虽然带有Javascript,但这是指其语法规则是参考Javascript对象的,而不是只能用于Javascript语言。

JSON无论对于人,还是对于机器来说,都是十分便于阅读和书写的,而且相比XML(另一种常见的数据交换格式),文件更小,因此迅速成为网络上十分流行的交换格式。

近年来,Javascript已经成为浏览器上事实上的标准语言,Javascript的风靡,与JSON的流行也有密切的关系。

因为JSON本身就是参考Javascript对象的规则定义的,其语法与Javascript定义对象的语法几乎完全相同。

JSON格式的创始人声称此格式永远不升级,这就表示这种格式具有长时间的稳定性,10年前写的文件,10年后也能用,没有任何兼容性问题。

二、JSON的语法规则是怎样的?

JSON的语法规则十分简单,无论用何种方法总结都只有数条而已,可称得上“优秀完美”,总结起来有:

-数组(Array)用方括号(“[ ]”)表示。

-对象(Object)用大括号(“{ }”)表示。

-名称/值对(name/value)组合成数组和对象。

-名称(name)置于双引号中,值(value)有字符串、数组、布尔值、null、对象和数组。不存在undefined、function等。

-并列的数据之间用(“,”)分隔。

JSON名称用双引号“”,不能使用单引号‘’。

{

       “name”:”muzidigbig”,

       “age”:23

}

JSON结构有两种结构:

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

  • 1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
  • 2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
  1. 对象
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
  1. 数组
JSON的使用、规则、地理位置、序列化/反序列化
  1. 名称/值对(Name/Value)
JSON的使用、规则、地理位置、序列化/反序列化

Value---字符串:只能用双引号,使用单引号会报错

JSON的使用、规则、地理位置、序列化/反序列化

Value---数值:不能使用8/16进制

JSON的使用、规则、地理位置、序列化/反序列化

三、JSON和XML

JSON常被拿来与XML做比较,因为JSON的诞生本来就多多少少要来取代XML的意思。相比XML,JSON的优势如下:

-没有结束标签,长度更短,读写更快。

-能够直接被Javascript解析器解析。

-可以使用数组。

JSON:

       {

              “name”:”muzidigbig”,

              “age”:”22”,

              “friends”:[“Adam”,”Lucy”,”Gwen”]

       }

XML:

       <root>

              <name>muzidigbig</name>

              <age>22</age>

              <friends > Adam </friends >

               <friends > Lucy </friends >

               <friends > Gwen </friends >

       </root>

四、JSON的解析和生成

在Javascript中,有两个方法与此相关:JSON.parse()和JSON.stringify().

JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
<script>

    var str = '{"name":"muzidigbig","age":23,"friends":["Adam","Lucy","Gwen"]}';

    var obj = JSON.parse(str);

    console.log("("+eval(obj)+")");

    console.log(obj);

    //反序列化

    console.log(typeof obj);//object

    //第二个参数是个数组:可以对数值进行处理

    var objFun = JSON.parse(str,function(name,value) {

        console.log(name+"---"+value);

        if(name === "age"){

            value = 25;

        }

        //注意要将value返回

        return value;

    });

    console.log(objFun);//{name: "muzidigbig", age: 25, friends: Array(3)}


    var jsonStr = JSON.stringify(obj);

    console.log(jsonStr);

    //序列化

    console.log(typeof(jsonStr));//string

    var jsonStrFun = JSON.stringify(obj,function(name,value){

        if(name === "age"){

            value = 28;

        }

        return value;

    });

    console.log(jsonStrFun);//{"name":"muzidigbig","age":28,"friends":["Adam","Lucy","Gwen"]}


    //第二个参数为数组

    var obj1 = {

        a:1,

        b:2,

        c:3,

        d:4

    }

    //在序列化生成字符串的时候只有在数组的变量才会变为JSON的名称并对序列化的名称/值进行配列

    var obj1Str = JSON.stringify(obj1,['a','d','b','c']);

    console.log(obj1Str);//{"a":1,"d":4,"b":2,"c":3}

    console.log(typeof obj1Str);//string

</script>
           

第三个参数将序列化变为易于阅读的形式

JSON的使用、规则、地理位置、序列化/反序列化

五、JSON和XML转换

参考:https://www.json.cn/component.html

JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化

六、AJAX和JSON

JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化

七、GeoJSON和TopoJSON

两种JSON格式的扩展格式,TopoJSON是GeoJSON的优化版。

分析Geojson地理信息:http://geojson.io

JSON的使用、规则、地理位置、序列化/反序列化

案例:

JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化

案例:

JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化
JSON的使用、规则、地理位置、序列化/反序列化