Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表中写入json文件_Python_Json - Fatal编程技术网

Python 从列表中写入json文件

Python 从列表中写入json文件,python,json,Python,Json,我有以下列表数据要保存在json文件中,以便以后访问: data = [{"nomineesWidgetModel":{"title":"","description":"", "refMarker":"ev_nom","eventEditionSummary":{"awards":[{"awardName":"Oscar","trivia":[]}]}}}] 如果另存为txt: for item in data: with open('./data/awards.txt', 'w

我有以下列表数据要保存在json文件中,以便以后访问:

data = [{"nomineesWidgetModel":{"title":"","description":"",  
"refMarker":"ev_nom","eventEditionSummary":{"awards":[{"awardName":"Oscar","trivia":[]}]}}}]
如果另存为txt:

for item in data:
    with open('./data/awards.txt', 'w', encoding='utf-8') as f:
        f.write(', '.join(str(item) for item in data))

Output:
{"nomineesWidgetModel":{"title":"","description":"","refMarker":"ev_nom", 
 "eventEditionSummary":{"awards":[{"awardName":"Oscar","trivia":[]}]}}}

但我后来在Jupyter笔记本中打开文件时出错

如果另存为json

for item in data:
    with open('data.json', 'w', encoding='utf-8') as f:
        json.dump(item, f, ensure_ascii=False, indent=4)

Output with extra backslash:
"{\"nomineesWidgetModel\":{\"title\":\"\",\"description\":\"\",\"refMarker\":\"ev_nom\", 
 \"eventEditionSummary\":{\"awards\":[{\"awardName\":\"Oscar\",\"trivia\":[],}]}}

有没有一种更简单的方法可以做到这一点,而不必导入文件并替换额外的斜杠?

多亏了上面的@Alexander解释,我能够将我所抓取的内容保存在dict中,而不是列表中,然后在使用以下内容迭代页面时另存为json:

with open('data.json', 'a') as file:
            json.dump(data, file, indent=1)

只需像往常一样使用
json

import json

data = [{"nomineesWidgetModel":{"title":"","description":"", "refMarker":"ev_nom","eventEditionSummary":{"awards":[{"awardName":"Oscar","trivia":[]}]}}}]

with open('data.json', 'w') as f:
    json.dump(data, f, indent=4)

我认为该计划的运作符合预期。这个列表不是字典列表,而是字符串列表,这可能就是它们被转义的原因。在任何情况下,我很确定您都可以
json.dump()
完成整个过程,无需迭代。其他常规提示,您可以在文件的上下文管理器中移动循环。你能分享一下你在Jupyter笔记本中打开它时遇到的错误吗?谢谢你的解释!我的评论有点夸张,但要真正解决这个问题,这里最重要的是只需将
json.dump(data)
写入文件。不过,让我知道这是否有效,我不能完全肯定。稍后我会尝试写一个正确的答案,并给出更好的解释。