如何在Python中从文件和隐秘读取dict数据到JSON

时间:2019-01-11 19:18:55

标签: python json

我的文件中有以下数据。在阅读并尝试转换为JSON时出错。

文件(modes.txt):

{'status': True, 'mode': 'full'} {'status': False, 'mode': 'half'}

代码:

with open("modes.txt",'r') as f:
   ds = json.dumps(json.load(f))

错误:

  

JSONDecodeError:期望属性名称用双引号引起来:   第1行第2列(字符1)

错误在预期的行上,因为文件中的文件字符串未用双引号引起来。 我可以解决将单引号替换为双引号的问题。 在这种情况下,什么是好的/优雅的解决方案?

1 个答案:

答案 0 :(得分:2)

源文件的json格式存在三个问题(tl; dr:它不是有效的json)

  1. 这是一系列的字典,但是它们不在列表中,只是光秃秃的
  2. True在json中为true,与False的{​​{1}}
  3. 相同
  4. 您已经注意到,单引号还是双引号。

您可以通过以下方法解决这些问题:

false

这将从文件中读取每一行,非常粗略地对其进行修复,然后将其附加到列表中。最终结果是字典列表。

请注意,此代码是一个示例,旨在演示可能的解决方法,请不要在生产中实际使用它。如果您的modes.txt包含转义的双引号怎么办?还是字符串中的单词import json ds = list() with open("modes.txt", 'r') as f: for line in f.readlines(): fixed_line = line.replace('\'', '"').replace("False", "false").replace("True", "true").strip() ds.append(json.loads(fixed_line)) True

简短的回答:您应该修复输入文件以包含有效的json。