【发布时间】:2018-10-30 02:11:31
【问题描述】:
查看了以前的答案但无法解决,json.loads 不起作用。
代码:
import json
import operator
Data_to_python ={}
Bank_Data_note= open('Data_for_python.txt','r') # open file
Bank_Data_str = Bank_Data_note.read()
print(Bank_Data_str)
Data_to_python =json.loads(Bank_Data_str) # dictinary
print(Data_to_python)
来自文本文件的 json 格式:
{{"Transaction_1":{"Name":"Magnolia","Location":"Ayilon male","Amount":289,"Date":"5/5/18"},
{"Transaction_2":{"Name":"Landver,"Location":"Cinima-city Ramat-hashron","Amount":15,"Date":"15/5/18"},
{"Transaction_3":{"Name":"Superfarm","Location":"Shivat-hacochvim male","Amount":199,"Date":"7/5/18"},
{"Transaction_4":{"Name":"Printing solutions","Location":"Afeka tel-aviv","Amount":16,"Date":"25/5/18"}}
我知道了:
obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: 期望用双引号括起来的属性名称:第 1 行第 2 列 (字符 1)
【问题讨论】:
-
那不是有效的 JSON。开头和结尾的双花括号应该是单花括号,
Landver后面少了一个引号。 -
谢谢,做到了,但它仍然无法正常工作:obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name 用双引号括起来:第 2 行第 1 列 (字符 92)
-
在开始时删除双括号是不够的。要么你必须把它变成一个值列表(通过使用方括号而不是大括号),把它变成一个平面对象(通过删除每行周围的大括号),或者......嗯,有很多可能的事情是排序的接近这个是有效的 JSON,但很难猜出你想要哪些东西。
-
真正的问题是:这个文件是从哪里来的?它不是有效的 JSON,需要多次更改——并猜测这些更改应该是什么——才能解析。之后它可能仍然不是你真正想要的。如果您编写了生成此文件的代码,则需要修复 那个 代码。或者,如果您在文本编辑器中手动创建文件,您应该使用更智能的编辑器来帮助您正确格式化 JSON,或者使用像 JSONLint 这样的网站。
-
什么是“正确的”?这应该是单元素字典的列表还是平面字典?而且,更重要的是:它是从哪里来的?某些人或某些代码生成了此文件。您要求我们做的是猜测那个人或编写该代码的人的意图。你可能知道那个人是谁,或者可以看到那个代码——或者至少你知道为什么要使用他们的输出——所以你可以比我们猜得更好。或者你可以告诉我们你知道的。