目前我正在开展一个项目,我需要将多个.yaml filse转换为.json才能使用它。
示例.yaml-file:
id: 1
name: Tony
created: ruby/object:ActiveSupport::TimeWithZone
zone: utc
time: 10:00:00
updated: ruby/object:ActiveSupport::TimeWithZone
zone: utc
time: 10:00:01
但是,当我尝试使用此脚本转换它时:
python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin),
sys.stdout, indent=4)' < test.yaml > test.json
我返回此错误:
expected <block end>, but found '?' in "<stdin>", line 9, column 5
修改1:已更改.yaml文件示例(created_at)
答案 0 :(得分:2)
也许yaml文件应该是这样的:
expected_link = 'https://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=1234567890'
expect(page).to have_content(ERB::Util.html_escape(expected_link))
运行此代码:
id: 1
name: Tony
created:
zone: utc
time: '2016-11-24 10:00:00'
updated:
zone: utc
time: '2016-11-24 10:00:01'
你会得到:
with open('test.yaml') as f:
dataMap = yaml.safe_load(f)
print (json.dumps(dataMap))
希望这有帮助。
答案 1 :(得分:0)
您的输入不正确YAML,因为您没有键/值对:
created: ruby/object:ActiveSupport::TimeWithZone
不缩进,后跟缩进的键/值对:
zone: utc
可能的原因是您遗漏了!
为红宝石对象引入标记。你应该摆脱完整的ruby/object:ActiveSupport::TimeWithZone
。
你得到的信息是标量不允许使用冒号是因为PyYAML不支持&#39;:&#39;在字符串标量(ruby/object:ActiveSupport::TimeWithZone
)中,即使该冒号后面没有空格。我建议你更新到ruamel.yaml(它支持YAML 1.2和更多的东西。免责声明:我是该软件包的作者)。
您还应该使用&#39; .safe_load()&#39;而不是`.load()&#39; (这不安全!)
给出正确的YAML输入:
id: 1
name: Tony
created:
zone: utc
time: 10:00:00
updated:
zone: utc
time: 10:00:01
并且正在运行:
python -c 'import sys, ruamel.yaml, json; json.dump(ruamel.yaml.safe_load(sys.stdin), sys.stdout, indent=4)' < test.yaml
你会得到:
{
"updated": {
"zone": "utc",
"time": 36001
},
"id": 1,
"name": "Tony",
"created": {
"zone": "utc",
"time": 36000
}