我有一个文件config.json
,其中包含一些JSON,如下所示:
{
"json":{
"type":"service",
"project":"project",
"key":"key",
"client":"client"
},
"project_id":"1"
}
我想将此JSON数据包含在YAML文件中。
YAML看起来像这样(这是我要求的输出):
contexts:
- config:
json: |
{
"type": "service",
"project": "project",
"key": "key",
"client": "client"
}
project_id: "1"
name: cloud
current-context: cloud
此处有两个键json
& project_id
来自config.json
数据。
此JSON数据在config
下添加为contexts
。
以下内容强调来自config.json
数据的两个信息。
contexts:
- config:
json: |
----
{
}
project_id: "1"
----------
name: cloud
current-context: cloud
我该怎么做?
我试过如下:
with open("config.json") as f:
config = yaml.safe_load(f)
config_map = {}
for key in config:
config_map[key] = str(config[key])
context = dict(
config=config_map,
name="cloud",
)
data = {
"contexts": [context],
"current-context": "cloud",
}
但这不正确。
谁能指出我正确的方向?
答案 0 :(得分:0)
如果您真的想将键json
的值转储为文字块样式标量,可以使用:
import sys
from ruamel import yaml
with open("config.json") as f:
config = yaml.safe_load(f)
for key in config:
try:
int(config[key])
val = yaml.scalarstring.DoubleQuotedScalarString(config[key])
except TypeError:
val = yaml.round_trip_dump(
config[key], default_flow_style=True, width=10, default_style='"')
val = val.replace('{"', '{\n "').replace('"}', '"\n}')
val = yaml.scalarstring.PreservedScalarString(val)
config[key] = val
context = dict(
config=config,
name="cloud",
)
data = {
"contexts": [context],
"current-context": "cloud",
}
yaml.round_trip_dump(data, sys.stdout)
为您提供完全您所需的输出。您可能希望调整try
语句,该语句确定呈现为双引号标量的内容,以及作为文字块标量的内容。