我有一个JSON文件包含一个像这样的列表:
"locales": {
"de": {
"default": {
"vegetables": [
"apple",
"melon",
"grape",
"pear"
]
}
},
"fr": {
"default": {
"vegetables": [
"apple",
"melon",
"grape",
"pear"
]
}
},
"nl": {
"default": {
"vegetables": [
"apple",
"melon",
"grape",
"pear"
]
}
},
(...)
}
我想根据区域设置(de,fr,nl等)迭代locales
广告操作vegetables
。我怎么能用python实现呢?
我试过像
这样的东西import json
_MY_CUSTOM_ORDER_DE = [
"pear",
"grape",
"apple",
"melon"]
_MY_CUSTOM_ORDER_NL = [
"melon",
"pear",
"apple",
"grape"]
def updateJsonFile():
jsonFile = open('vegetables.json', 'r')
data = json.load(jsonFile)
jsonFile.close()
for item in data["locales"]:
if item == "de":
item["default"]["vegetables"] = _MY_CUSTOM_ORDER_DE
elif item == "nl":
item["default"]["vegetables"] = _MY_CUSTOM_ORDER_NL
else:
## do nothing ##
with open('sortedvegetables.json', 'w') as outfile:
json.dump(data, outfile, indent=4, sort_keys=True)
def main():
updateJsonFile()
if __name__ == '__main__':
main()
不幸的是,这不起作用,但是在执行脚本后终端中出现了错误。 sortedvegetables.json
看起来与vegetables.json
答案 0 :(得分:1)
在这里你的回答:
你在代码中遇到了一些逻辑错误。
1)你试图比较列表。
if item == ["de"]:
应该是:if item == "de":
2)您尝试更新为item["default"]["vegetables"]
,这不是正确的方式,应该恰当地写为data["locales"]["de"]["default"]["vegetables"]
或data["locales"]["nl"]["default"]["vegetables"]
。
import json
_MY_CUSTOM_ORDER_DE = [
"pear",
"grape",
"apple",
"melon"]
_MY_CUSTOM_ORDER_NL = [
"melon",
"pear",
"apple",
"grape"]
def updateJsonFile():
jsonFile = open('vegetables.json', 'r')
data = json.load(jsonFile)
jsonFile.close()
for item in data["locales"]:
print(item)
if item == "de":
print(item)
data["locales"]["de"]["default"]["vegetables"] = _MY_CUSTOM_ORDER_DE
elif item == "nl":
print(item)
data["locales"]["nl"]["default"]["vegetables"] = _MY_CUSTOM_ORDER_NL
else:
print("test")
pass
with open('sortedvegetables.json', 'w') as outfile:
json.dump(data, outfile, indent=4, sort_keys=True)
def main():
updateJsonFile()
if __name__ == '__main__':
main()
答案 1 :(得分:0)
您对JSON的含义存在根本性的误解。字典中没有固有的顺序;尝试对条目进行排序毫无意义。
早期版本中的Python会将解释器发生在内部的任何顺序转储出内部dict
,无论您对它进行了多少排序。使用最新的Python版本,您可以期望dict按照您创建它的顺序返回...但是JSON语义最终仍然是一个没有任何字典顺序的表示。