JSON&XML&CSV

  • 数据交换格式
    • 文本数据交换格式(容易测试和编辑but尺寸大,读取慢):CSV、JSON、XML
    • 二进制数据交换格式:swf

CSV

  • 用分隔符分离的纯文本文件

JSON

  • JavaScript object notation (JSON)JavaScript对象表示法

  • JSON是轻量级的文本数据交换格式,用于数据交互

  • 独立于语言

    • 被设计用于可读的数据交换
  • JSON比XML更小,更易解析

    • 只支持字符串、数值、布尔值、null及在此基础上的对象和数组
  • 主要用于服务器和web应用程序之间传输数据

使用

  • 在后台应用程序中将相应数据封装成JSON格式,传到前台页面之后,需要将JSON格式转换为JavaScript对象,然后在网页中使用该数据。
  • 在服务器上读取JSON格式(作为HttpRequest或者文件),将JSON数据转换为JavaScript对象,然后在网页中使用该数据。
  • JavaScript函数eval()用于将 JSON 文本转换为 JavaScript 对象。

两种结构

  1. 无序对象结构

    • 对象结构是使用大括号“{}”括起来的,大括号内是用英文逗号分隔的“关键字:值”对。注意:key必须用双引号

    • var JSONObj =
      {
          "键名1":值1,
          "键名2":值2,
          ……
          "键名n":值n
      }
      
  2. 有序数组结构

    • JSON数组结构是用中括号“[]”括起来,中括号内部以英文逗号“,”分隔的值列表组成。

    • var arr =
      [
          {
              "键名1":值1,
              "键名2":值2
          },
          {
              "键名3":值3,
              "键名4":值4
          },
          ……
      ]
      

python3中的JSON模块

  • 内置模块

    • 序列化和反序列化
  • 常用方法

    • JSON.dump 将Python对象序列化为JSON格式的数据流并写入文件类型的对象中

    • JSON.dumps 将Python对象序列化为JSON格式的字符串

    • JSON.load 从文件类型的对象中读取JSON格式的数据并反序列化成Python对象

    • JSON.loads 将包含JSON格式数据的字符串反序列化成Python对象

pprint库

  • pretty print
  • 结构化打印json数据
import pprint

json_data = json.loads(res.text)
pprint.pprint(json_data)

  • 两个方法:

    • pprint()

      • pprint() 函数默认会对字典进行升序排序

      • 每行的长度默认是 80 个字符。如果一个数据结构在一行上放不下,pprint() 会将其打断。

        width 参数可以修改每行的长度。

    • pformat()

      • 不直接打印,而是返回一个字符串

XML

  • xml:extensible markup language,可扩展标记语言
  • 与json一样,也是一种用于交互的数据格式,一般也叫xml文档

语法

一个常见的XML文档一般由一下部分组成:

  • 文档声明(在文档的最前面)

    • <?xml version="1.0" encoding="utf-8"?>
      
  • 元素

    • 一个元素包含开始和结束标签
    • 元素可嵌套
    • 注意:xml中所有空格和换行都会被当做具体内容处理
  • 属性

    • 一个元素可以拥有多个属性
    • 属性信息也可以用子元素表示

python中的SAX、DOM、ElementTree

  • DOM模块:一次性将整个XML文档加载进内存,适合解析小文件

  • SAX模块:从根元素开始,按顺序一个元素一个元素向下见解析,适合大文件

  • elementtree模块:检具上述两种模块的优点,可以读写xml文档

    • image-20221103122734543
  • 实际工作中需要查找特殊元素,需要用xml.etree.ElementTree.Element的find方法,还要结合XPath匹配查找

    • find()
    • findall()
    • findtext()

XML vs JSON

  • json和xml都是自描述的结构化文档,可以自带描述信息

  • 同一份数据,既可以用JSON也可以用XML

  • JSON的体积比较小,所以服务器返回给移动端数据格式以JSON居多