2017-04-01 81 views
0

我試圖做一個JSON文件,因爲我在python JSON文件 我已經是爲遵循新的一個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" 
} 
+2

預期的格式不是有效的JSON。你想要什麼?一本字典?還是一個JSON?另外,你有什麼嘗試? –

+0

你想保留字母順序嗎? FWIW,您的輸入格式比輸出格式更有用,因爲字典查找是O(1),但列表查找是O(n)。 –

回答

0

拷貝代碼到一個文件中,如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,享受吧〜

2

從文件中讀取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)

在適當情況下。

0
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'}]