簡體   English   中英

如何在python中重新格式化json

[英]how to reformat a json in python

我正在嘗試制作一個json文件,因為我是python中的新手,我擁有的json文件如下所示,我想重新格式化它

{  
   "A1":"a1",
   "aback":"\u0259b\u00e6k",
   "abaft":"abaft",
   "abandon":"\u0259b\u00e6nd\u0259n",
   "abandoned":"\u0259b\u00e6nd\u0259nd",
   "abandonment":"\u0259b\u00e6nd\u0259nm\u0259nt",
   "abase":"abase",
   "abash":"\u0259b\u00e6\u0283",
   "abashment":"abashment",
   "abate":"\u0259bet",
   "abatement":"\u0259betm\u0259nt",
   "abbey":"\u00e6bi",
   "abbreviate":"\u0259briviet",
   "abbreviation":"\u0259brivie\u0283\u0259n"
}

我要實現的格式是

{  
   word: "A1",
   transcription:"a1"
}
{
   word: "aback",
   transcription :"\u0259b\u00e6k"
}
{
  word:"abaft"
  transcrition:"abaft"
}
{
  word:"abbreviation",
  transcription:"\u0259brivie\u0283\u0259n"
}

從文件中讀取JSON並將其轉換為字典。 使用列表推導生成字典列表,並將其寫為JSON列表:

import json

with open('file.json') as infile, open('out.json', 'w') as outfile:
    d = json.load(infile)
    json.dump([{'word': k, 'transcription': d[k]} for k in d], outfile)

對於您的輸入文件,這將產生一個包含以下內容的輸出文件:

[{"transcription": "\u0259b\u00e6\u0283", "word": "abash"}, {"transcription": "\u0259briviet", "word": "abbreviate"}, {"transcription": "abaft", "word": "abaft"}, {"transcription": "a1", "word": "A1"}, {"transcription": "\u0259b\u00e6nd\u0259nd", "word": "abandoned"}, {"transcription": "\u0259b\u00e6nd\u0259nm\u0259nt", "word": "abandonment"}, {"transcription": "\u0259betm\u0259nt", "word": "abatement"}, {"transcription": "\u0259bet", "word": "abate"}, {"transcription": "\u0259b\u00e6nd\u0259n", "word": "abandon"}, {"transcription": "\u00e6bi", "word": "abbey"}, {"transcription": "\u0259brivie\u0283\u0259n", "word": "abbreviation"}, {"transcription": "\u0259b\u00e6k", "word": "aback"}, {"transcription": "abase", "word": "abase"}, {"transcription": "abashment", "word": "abashment"}]

您可以稍微格式化輸出,使用indent

json.dump([{'word': k, 'transcription': d[k]} for k in d], outfile, indent='')

將輸出:

[
    {
        "word": "aback",
        "transcription": "\u0259b\u00e6k"
    },
    {
        "word": "abandonment",
        "transcription": "\u0259b\u00e6nd\u0259nm\u0259nt"
    },
    {
        "word": "abatement",
        "transcription": "\u0259betm\u0259nt"
    },
    {
        "word": "abbey",
        "transcription": "\u00e6bi"
    },
    {
        "word": "abbreviation",
        "transcription": "\u0259brivie\u0283\u0259n"
    },
    {
        "word": "abandoned",
        "transcription": "\u0259b\u00e6nd\u0259nd"
    },
    {
        "word": "abash",
        "transcription": "\u0259b\u00e6\u0283"
    },
    {
        "word": "abaft",
        "transcription": "abaft"
    },
    {
        "word": "abashment",
        "transcription": "abashment"
    },
    {
        "word": "abate",
        "transcription": "\u0259bet"
    },
    {
        "word": "abbreviate",
        "transcription": "\u0259briviet"
    },
    {
        "word": "A1",
        "transcription": "a1"
    },
    {
        "word": "abandon",
        "transcription": "\u0259b\u00e6nd\u0259n"
    },
    {
        "word": "abase",
        "transcription": "abase"
    }
]

請注意,您請求的格式實際上不是有效的JSON。 如果您不希望使用逗號和列表括號,則可以這樣寫出文件:

with open('file.json') as infile, open('out.json', 'w') as outfile:
    d = json.load(infile)
    print(*[json.dumps({'word': k, 'transcription': d[k]}, indent='    ') for k in d], file=outfile, sep='\n')
{
    "word": "aback",
    "transcription": "\u0259b\u00e6k"
}
{
    "word": "abandonment",
    "transcription": "\u0259b\u00e6nd\u0259nm\u0259nt"
}
{
    "word": "abatement",
    "transcription": "\u0259betm\u0259nt"
}
{
    "word": "abbey",
    "transcription": "\u00e6bi"
}
{
    "word": "abbreviation",
    "transcription": "\u0259brivie\u0283\u0259n"
}
{
    "word": "abandoned",
    "transcription": "\u0259b\u00e6nd\u0259nd"
}
{
    "word": "abash",
    "transcription": "\u0259b\u00e6\u0283"
}
{
    "word": "abaft",
    "transcription": "abaft"
}
{
    "word": "abashment",
    "transcription": "abashment"
}
{
    "word": "abate",
    "transcription": "\u0259bet"
}
{
    "word": "abbreviate",
    "transcription": "\u0259briviet"
}
{
    "word": "A1",
    "transcription": "a1"
}
{
    "word": "abandon",
    "transcription": "\u0259b\u00e6nd\u0259n"
}
{
    "word": "abase",
    "transcription": "abase"
}

最后,如果順序很重要,則可以遍歷已排序的鍵,只需使用:

for k in sorted(d)

在適當情況下。

In [16]: d
Out[16]: {'a': 'A', 'b': 'B', 'c': 'C'}

In [17]: lis = []

In [18]: lis
Out[18]: []

In [19]: for key in d:
    ...:     dd ={}
    ...:     dd["word"] = key
    ...:     dd["transcrition"] = d[key]
    ...:     lis.append(dd)
    ...:     

In [20]: lis
Out[20]: 
[{'transcrition': 'A', 'word': 'a'},
 {'transcrition': 'C', 'word': 'c'},
 {'transcrition': 'B', 'word': 'b'}]

將此代碼復制到諸如convert.py的文件中

import sys
import json
from pprint import PrettyPrinter, pprint


def main():
    fn =   sys.argv[1]
    with open(fn, 'rb') as f:
        data = json.loads(f.read())

    for k, v in data.items():
        pprint({'word':k, 'transcription':v})


if __name__ == '__main__':
    main()

然后運行命令python convert.py YOUR_JSON_FILE_NAME ,盡情享受吧〜

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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