我的json文件是字典格式,我想把它读入我的Python。这是我的原始文件。
fruit.json:
{
"Q":"Is it red?",
"yes":{
"answer":"apple"
},
"no":{
"Q":"Is it yellow",
"yes":{
"answer":"banana"
},
"no":{
"Q":"Is it sweet?",
"yes":{
"answer":"mango"
},
"no":{
"Q":"Bigger than strawberry?",
"yes":{
"answer":"lemon"
},
"no":{
"answer":"blueberry"
}
}
}
}
}
阅读完之后,我想知道是否可以以相同的格式打印它们。
代码:
import json
import sys
s = json.loads(open(r'C:\Users\makiyo\fruit.json').read())
print(s)
print(type(s))
print("--------")
print(json.dumps(s, indent=4), file=sys.stderr)
s的类型是dict:
{'Q': 'Is it red?', 'no': {'Q': 'Is it yellow', 'no': {'Q': 'Is it sweet?', 'no': {'Q': 'Bigger than strawberry?', 'no': {'answer': 'blueberry'}, 'yes': {'answer': 'lemon'}}, 'yes': {'answer': 'mango'}}, 'yes': {'answer': 'banana'}}, 'yes': {'answer': 'apple'}}
输出:
{
"Q": "Is it red?",
"no": {
"Q": "Is it yellow",
"no": {
"Q": "Is it sweet?",
"no": {
"Q": "Bigger than strawberry?",
"no": {
"answer": "blueberry"
},
"yes": {
"answer": "lemon"
}
},
"yes": {
"answer": "mango"
}
},
"yes": {
"answer": "banana"
}
},
"yes": {
"answer": "apple"
}
}
这不是fruit.json的格式,我不知道为什么他们会改变这样的'yes'/'no'位置。
答案 0 :(得分:1)
如果您不更改任何内容,则可以选择保留对您解析为JSON的字符串的引用。
with open(r'C:\Users\makiyo\fruit.json') as input_file:
raw = input_file.read()
s = json.loads(raw)
assert type(raw) is str
assert type(s) is dict
如果您不想保留引用,或者想要编辑dict,可以使用json.dumps
。
output = json.dumps(s)
assert type(output) is str
答案 1 :(得分:0)
python中的dictonary无法保留添加它们的项目的顺序。 json.dumps()
从提供的json中创建一个字典。
您可以使用OrderedDict保留订单。
from collections import OrderedDict
s = json.loads(open(r'C:\Users\makiyo\fruit.json').read(), object_pairs_hook=OrderedDict)
# recursively print in desired format.
def print_json(json):
for k, v in json.iteritems():
print k, v
if type(v) is OrderedDict:
print_json(v)
print_json(s)
或者您可以使用python 3.6 - Dictionaries are ordered in Python 3.6+