考虑到以下因素,我们何时应该优先使用YAML而不是JSON,反之亦然?
我计划在嵌入式系统中使用这两个中的一个来存储配置文件.
我做了一个小测试用例来比较YAML和JSON的速度:
import json
import yaml
from datetime import datetime
from random import randint
NB_ROW=1024
print 'Does yaml is using libyaml ? ',yaml.__with_libyaml__ and 'yes' or 'no'
dummy_data = [ { 'dummy_key_A_%s' % i: i, 'dummy_key_B_%s' % i: i } for i in xrange(NB_ROW) ]
with open('perf_json_yaml.yaml','w') as fh:
t1 = datetime.now()
yaml.safe_dump(dummy_data, fh, encoding='utf-8', default_flow_style=False)
t2 = datetime.now()
dty = (t2 - t1).total_seconds()
print 'Dumping %s row into a yaml file : %s' % (NB_ROW,dty)
with open('perf_json_yaml.json','w') as fh:
t1 …Run Code Online (Sandbox Code Playgroud) 我使用以下格式解析大约6500行的YAML文件:
foo1:
bar1:
blah: { name: "john", age: 123 }
metadata: { whatever1: "whatever", whatever2: "whatever" }
stuff:
thing1:
bluh1: { name: "Doe1", age: 123 }
bluh2: { name: "Doe2", age: 123 }
thing2:
...
thingN:
foo2:
...
fooN:
Run Code Online (Sandbox Code Playgroud)
我只想用PyYAML库解析它(我认为在Python中没有其他替代方法:我如何在Python中解析YAML文件).
只是为了测试,我编写代码来解析我的文件:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Run Code Online (Sandbox Code Playgroud)
使用time命令执行脚本以及我这次得到的脚本:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
Run Code Online (Sandbox Code Playgroud)
那些价值看起来并不太好.我只想用JSON测试相同的内容,只需将相同的YAML文件转换为JSON:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = …Run Code Online (Sandbox Code Playgroud)