簡體   English   中英

在python中構造包含JSON數據的YAML

[英]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

這里,兩個鍵jsonproject_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM