欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSON的简要解析

程序员文章站 2022-04-19 14:09:35
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。...

概念解释

JSON  指的是JavaScript对象表示法(Java Script Object Notation)

JSON  是轻量级的文本数据交换格式

JSON  具有自我描述性,更易理解

JSON  使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

更简单直白一点的解释是

JSON 就会是一种有规则的字符串

JSON 就是key/value存储,理论上支持String、Number、Value几乎支持所有类型

 JSON  可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串。

 JSON语法规则

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

名称:

JSON的书写格式:{key:value}、{key:array}

如果是字符串的话,键和值都需要用双引号

取值范围:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)一定是英文双引号(""),个别弱语言可以支持单引号。
  • 逻辑值(true 或 false
  • 数组(在方括号中)一般是在Value位置上
  • 对象(在花括号中)一般是在Value位置上
  • null

常见的JSON格式:

  • {"key":"value"},最简单的JSON 格式。
  • {"key1":"value1","key2":"value2"},一个JSON中有多个键值对的表达方式。
  • {"key":["a","b","sojson.com"]},value是一个Array 的JSON格式
  • {"sojson":["5年","JSON在线解析","sojson.com",true,1,null]},value是一个Array 的JSON格式,并且这个数组中有多重类型的元素,有String,Boolean,Number,null。
  • {"key":{"json":"json for javascript"}},value 是JSONObject的JSON格式。

 JSON和XML的比较

json:

  • JSON 是纯文本
  • JSON 具有“自我描述性”(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析

与xml相比json的优点在于:

没有结束标签,更便于阅读,读写速度更快,可以使用数组,能够进行嵌套具有层级结构。

下面有代码展示一下对比效果:

XML的

<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>黑龙江</name>
        <cities>
            <city>哈尔滨</city>
            <city>大庆</city>
        </cities>
    </province>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>*</name>
        <cities>
            <city>台北</city>
            <city>*</city>
        </cities>
    </province>
    <province>
        <name>*</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>

JSON的

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

可以看到,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用的带宽。

JSON对象说明

JSON对象语法规则:

  • 数据在名称/值对中,如{"domain":"sojson.com"}
  • 可以多对键值对,如{"domain":"sojson.com","author":"soゝso","email":"i@itboy.net"}
  • 值里面可以有数组(Array),如{"domain_array":["sojson.com","soso.pub","soso.run","isoso.xin","isoso.xin"]}

JSON对象在花括号中,对象可以包含多个名称/值对,如下代码所示:

{
    "name": "小李",
    "age": 22,
    "birthday": "1994年6月30日",
}

JSON 使用 JavaScript 获取元素值:

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

var json =  {
        "name": "小李",
        "age": "22"
}

获取name和age

var name = json.name;
alert("name:" + json.name);
var age = json.age;
alert("age:" + json.age);

特殊情况: 

当我们对象里有特殊的Key,或者不是字符串的Key,处理起来稍微有点麻烦。

就上面的Demo,我们取name,那么就是json.name就可以取到“小李”。其实很好理解这个点“.”就是类似于“的”的感觉,json的name。

但如果是以下数据

var json = {
    "1": {
        "name": "小李",
        "age": "22"
    },
    "2": {
        "name": "小张",
        "age": "20"
    }
};
alert(json.1.name);// X 错误 throw Uncaught SyntaxError;

按我们刚刚的逻辑直接点,那么我们要取到“小张”就应该是。json.1.name吧,但是你会发现报错,错误信息应该是Uncaught SyntaxError,语法错误,请自行测试,

//正确的打开姿势如下:
alert(json[1].name);
alert(json["1"].name);
alert(json["1"]["name"]);
//错误,undefined
alert(json["1"][name]);

 问题就是数值可以不带引号,String必须带引号。

本文地址:https://blog.csdn.net/baipangtu/article/details/107279247