2018-12-22 了解 XML,JSON,YAML,Jinjia2 与Python

XML,JSON,YAML,Jinjia2是人机交互的语言
XML:eXtensible Markup Language: 可扩展标记语言
XML是一个框架语言,用于帮助使用者定义标签,其标记基于<>。
其中任何语法和标记都要有对应的关闭动作,比如<p>必须要对应</p> 例如:

<p> This is a example. </p>
<Location>
     <Country>UK</Country>
     <City>London</City>
     <Street/>
</Location>

在XML里,区分大小写。
在使用python的过程中,可以导入XML模块

axing@axing-rock:~$ pip3 install xmltodict
Collecting xmltodict
  Downloading https://files.pythonhosted.org/packages/42/a9/7e99652c6bc619d19d58cdd8c47560730eb5825d43a7e25db2e1d776ceb7/xmltodict-0.11.0-py2.py3-none-any.whl
Installing collected packages: xmltodict
Successfully installed xmltodict-0.11.0
axing@axing-rock:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import xmltodict
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'xmltodict']
>>> 

XML在python里主要用于传输数据。

JSON: JavaScript Object Notation, JavaScript 对象表示法
JSON和Python的字典很像,但是Python的字典类型是字典,而JSON则是字符串。

>>> import json
>>> dir()
['OrderedDict', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'json', 'xml_to_dict', 'xmltodict']
>>> mylocation = {'Location':{'Country':'China','City':'Hefei','Street':None}}
>>> mylocation
{'Location': {'Country': 'China', 'City': 'Hefei', 'Street': None}}
>>> type(mylocation)
<class 'dict'>
>>> mylocation_json = json.dumps(mylocation)
>>> mylocation_json
'{"Location": {"Country": "China", "City": "Hefei", "Street": null}}'
>>> type(mylocation_json)
<class 'str'>
>>> 

看到区别了吗,双引号和单引号,数据类型。
Python的字典是一个数据结构,运行在内存里存储和处理数据,但在退出python后就消失了。而JSON就可以把Python的字典编程字符串存储到硬盘或传递到远端,需要的时候再转换成字典。

>>> mylocation_dict = json.loads(mylocation_json)
>>> mylocation_dict
{'Location': {'Country': 'China', 'City': 'Hefei', 'Street': None}}
>>> 

json.dump 和 json.dumps
json.load 和 json.loads
加不加s的区别在于,不加s需要和文件结合,比如转换后存入文件。加了s则是在内存里进行转换。

YAML: YAML Ain't Markup Language YAML不是标识语言
这个有意思。YAML是用来解决复杂的JSON数据格式。
比如你看json:

{"test1":{"sum":300,"avg":50,"values":[45,76,90]},"test2":{"sum":400,"avg":70,"values":[88,40,120]}}

很不利于人类阅读:)
而YAML就很方便理解,举例一下:

JSON:
{"name":"Zhangsan","age":34,"children":[{"name":"zhangbaobao","age":2},{"name":"zhanghua","age":5}]}
YAML:
---
name: Zhangsan
age: 34
children:
- name: zhangbaobao
  age: 2
- name: zhanghua
  age: 5
#是不是很清晰?

那么,看一下列表和字典都在YAML里怎么表达:
。。。 未完待续

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容