4

以下のようなjsonファイルがあるとしましょうsrc.json

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

で使用するdublin内容をダンプしたい。dst.yamlyamlpython

これが私のコードです:

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'一重引用符が whiletitlecreatornotを持つのはなぜですか? 日付を囲む一重引用符を削除するには?
  2. 改行はどこですか?yaml ダンプ操作が必要です。

だれか助けて!

4

1 に答える 1

6
  1. その中に空間があるからです。
  2. への呼び出しに設定default_flow_style=Falseしますyaml.dump()

また、そのすべての再構築を行う必要はありません。既存の dublin dict を直接ダンプできます。

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 に答える