JSON与XML区别


JSON

简述:

JavaScript Object Notation 译为 JavaScript 对象标记

本质概述:是一种轻量级的数据交换格式

再次强调 JSON是 一种数据交换格式

字符串是JSON的表现形式/载体

JSON对象 与 JSON字符串的区别

  • 符合JSON格式的字符串叫做JSON字符串

    • 错误JSON格式
      {a:"Python"
  • 正确JSON格式
    {a:"Python"}
  • JSON和每种语言下特定的数据结构,进行数据交换,转换

JSON对象, JSON, JSON字符串 之间的区别

  • 绝大多数的答案,都站在JavaScript语言的角度,阐述区别
  • JSON是REST服务的标准格式
  • JSON的制定并不是专门为JavaScript设计的
  • 它只是一种传输数据的一种格式
  • JavaScript与JSON的数据交换里面,和Python,C#没有区别
  • JSON的数据类型与JavaScript过于相似
  • JSON有自己的数据类型,仅和JavaScript相似
  • JavaScript只是一个实现标准方案之一
  • 标准为:ECMASCRIPT -> ActionScript -> JSON的一个版本
  • 某种程度JSON和JavaScript是一种平级的语言
  • 误区(JSON与JavaScript,没有直接关系)

    JSON与JavaScript都是对ECMASCRIPT这个W3C(团队)它所制定的脚本的规范和标准实现

    JSON在最开始在前后端的分离起到了重要的作用,而服务器的语言种类繁多,前端最主流的就是JavaScript,因为JSON被大量的应用在JavaScript的交互中

    还有一个微软的TypeScript只是JavaScript的超集

  • JSON对象

    (1) 定义非常片面(在JavaScript中是存在的)

    (2) 放到 Python中的话,是没有这个JSON对象的

轻量级的数据格式

  • 外部数据交换的主流格式

    • XML

      使用较少,特殊情况例外

      在JSON出现之前,为主流交换格式

      在特定的领域,注重数据结构的领域会使用

      阅读稍显复杂

      跨语言交换数据

  • JSON的优势

    易于阅读

    易于解析

  • JSON作为数据交互的格式,存在组装和被解析的过程

    网络传输效率高

    数据量同XML相比,要更少

  • 跨语言交换数据

    Python调用C++,Java调用.Net

    把某一种语言的功能,做成一个服务,利用这个服务的特性使用JSON来进行传递数据


web结构

Web结构图 数据结构图

反序列化

当你拿到的JSON,不是一个str,而是一个object,这是框架默认把str转换成一个object,但是我们原生拿到的就是一个str

拿到JSON,能够快速访问JSON字符串中相关的信息

把JSON字符串转换成Python中已知的数据结构

  • 反序列化过程

    # 引入内置json模块,其中包含一系列操纵JSON数据的方法
    import json
    
    # json格式中,字符串的key 必需使用双引号,bool值为小写
    json_str = '{"name":"qiyue", "age":18, "2":false}'    
    
    JavaScript中为object数据结构
    
    # 调用json模块中的内置方法,转换json字符串类型,转换为Python数据类型
    Student = json.loads(json_str)
    print(Student)
    print(type(Student))
    
    转换后部分JSON格式特征,会转换为Python特征
    {'name': 'qiyue', 'age': 18, '2': False}    
    Python用dict类型,承载JSON中的object类型
    <class 'dict'>

    同一JSON字符串,在不同语言中,可能转换成不同的数据类型

    这个转换过程 称为 *反序列化***

  • 拓展:JSON数据类型 array(数组)

    # 反序列化
    # 引入内置json模块
    import json as x
    
    json_str = '[{"name":"qiyue", "age":18, "2":false}, {"name":"qiyue", "age":18, "2":false}]'
    
    # 包含两个对象的数组
    
    Student = x.loads(json_str)
    
    # 调用json模块中的内置方法,转换json格式字符串
    
    print(Student)
    
    print(type(Student))    Python用list类型,承载JSON中的array类型
    
    print(Student[1]['name'])    访问数组中对象的key

数组表示为一种集合,类似与 Python 中的 list,tuple 。只不过Python把集合分的比较细

比如 PHP 中只有一个数组,且非常强大的

这个是不同语言对集合不同的解构形式

数组其实就是一个集合

  • JSON 对应 Python 的数据类型

    JSON Python
    object dict
    array list
    string str
    number int
    number float
    true/false True/False
    null None

若精通一门语言,入门其他语言相对比较容易

因为绝大数语言,对于基本数据结构的定义都大同小异

例如循环语句面向对象

现在很多语言就是经典C,C语言的语法糖,内部的实现机制,内存管理不同

现在很多语言就是类 C语言 ,语言就是一种工具


序列化

把Python的数据类型,向JSON字符串转换的过程

  • 序列化过程

    import json
    
    Student = [
    
         {'name': 'qiyue', 'age': 18, '2': False},
    
         {'name': 'qiyue', 'age': 18}
    
        ]
    
    json_str = json.dumps(Student)
    
    # dumps 接收一个object参数,dict 也是属于 object
    
    print(json_str)
    
    # [{"name": "qiyue", "age": 18, "2": false}, {"name": "qiyue", "age": 18}]
    
    print(type(json_str))
    
    # <class 'str'>

    不仅是 Python 数据向 JSON 转换,是序列化

    把 XML 的字符串向 Python 转换,也是反序列化 / 序列化

  • 怎么把一个object存储到数据库里面去?

    数据库是一个个的二维表,没有办法去表示object

    • 错误示例:

      把 object 序列化成 JSON 字符串,或 XML 字符串

      然后把字符串,存储到数据库里面去

      需要的时候,从数据库里面读取出来,然后进行反序列化 *效率低 / 不可取***

  • 正确示例:

    MySQL 等数据库适合存储比较简单的数据结构

    应该把 object 拆分成一个个属性,进行存储

PS:实在是想存储 object,可使用 NOSQL MongoDB

  • 序列化的意义

    一般通过服务获取到其他语言进行序列化的 JSON 字符串

  • XML 数据格式代码

    <?xml version="1.0" encoding="UTF-8”?>
    
    <note>
    
    <to>Tove</to>
    
    <from>Jani</from>
    
    <heading>Reminder</heading>
    
    <body>Don’t forget me this weekend!
    
    </body>
    
    </note> 

Author: Ming Hui
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ming Hui !
 Previous
Python正则表达式 Python正则表达式
正则表达式 爬虫的基础掌握 是一个特殊的字符序列 检测一个字符串是否与我们设定的字符序列,相匹配 若匹配,则可以快速检索,替换文本的操作 场景示例1:检测一串数字是否是电话号码 场景示例2:检测一串字符串是否符合 Email 把一个文本中
2020-07-12
Next 
Python扩展知识 Python扩展知识
导语产品是需要打磨出来的,重点在于打磨二字,没有什么产品可以一就而成 字典替代switch Switch语句同样为条件分支语句 其他语言中Switch语句的作用,C# 字典映射替代switch语句 示例:def get_Sunday():
2020-07-12