4

假设我有一个如下所示的 json 文件,调用它src.json

{
    "main": {
        "contenttype": "Document"
    },
    "dublin": {
        "title": "ダウンロード",
        "description": "",
        "creators": [
            "池田大作"
         ],
        "created": "2012-04-23 10:09:34.642940"
    }
}

我想将dublin内容转储到in中dst.yaml使用。yamlpython

这是我的代码:

import json
import yaml

with open('src.json') as f:
    data = json.load(f)

dump = {'title': data.get('dublin', {}).get('title', ''),
        'description': data.get('dublin', {}).get('description', ''),
        'creator': data.get('dublin', {}).get('creators',[''])[0],
        'created': data.get('dublin', {}).get('created', '')
       }
with open('dst.yaml', 'w') as stream:
    yaml.safe_dump(dump, stream, allow_unicode=True )

但是,我对结果不满意:

{created: '2010-03-26 09:26:44.002029', creator: 池田大作, description: '    ', title: ダウンロード}     

满意的应该是:

created: 2010-03-26 09:26:44.002029
creator: 池田大作
description: ''
title: ダウンロード

然后,我的问题是:

  1. 为什么'2010-03-26 09:26:44.002029'有单引号而title不是creator单引号?如何删除日期周围的单引号?
  2. 换行符在哪里?它应该具有 yaml 转储操作。

任何一个帮助!

4

1 回答 1

6
  1. 因为里面有空间。
  2. default_flow_style=False您的呼叫设置为yaml.dump().

此外,您不需要进行所有重建;你可以直接转储现有的都柏林字典:

import json
import yaml

with open('src.json') as f:
    data = json.load(f)

with open('dst.yaml', 'w') as stream:
    yaml.safe_dump(data.get('dublin', {}), stream, allow_unicode=True,
                   default_flow_style=False)
于 2013-04-26T07:06:33.827 回答