[英]Construct YAML that contains JSON data in python
我有一個包含一些JSON的文件config.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",
}
但這是不正確的。
誰能指出我正確的方向?
如果您確實想將鍵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
語句,該語句確定將什么呈現為雙引號標量,以及將什么呈現為文字塊標量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.