Python:从一个txt文件解析多个JSON对象
我在重新表述这里提出的问题 以及其他职位。但我对JSON还不熟悉,我不太清楚其中有多少函数可以工作,特别是为了满足我的目的。我正在使用numpy和pandas开发Python3,我很好奇是否有任何函数可以简化这一过程 我正在尝试保存来自GoogleMapsAPI的多个请求。该API返回一个JSON对象,一个字典,大约52行。我有一个很大的数据集,我希望得到大约5000个这样的JSON对象。我创建了一个函数,将所有json对象写入一个txt文件。我在每个json对象之间有一个换行符。这是代码。。。所有这些都在一个循环中,不断向谷歌地图api发出请求Python:从一个txt文件解析多个JSON对象,python,json,Python,Json,我在重新表述这里提出的问题 以及其他职位。但我对JSON还不熟悉,我不太清楚其中有多少函数可以工作,特别是为了满足我的目的。我正在使用numpy和pandas开发Python3,我很好奇是否有任何函数可以简化这一过程 我正在尝试保存来自GoogleMapsAPI的多个请求。该API返回一个JSON对象,一个字典,大约52行。我有一个很大的数据集,我希望得到大约5000个这样的JSON对象。我创建了一个函数,将所有json对象写入一个txt文件。我在每个json对象之间有一个换行符。这是代码。。。
r = requests.get(url, params=payload) # request
json_var = r.json()
json_var['tweet_id'] = rows['tweet_id']
json_var['manual_location'] = manual_loc
if small==True:
print("writing")
with open("txt_files/small_geo_json.txt", 'a') as myfile:
myfile.write(json.dumps(json_var, indent=4))
myfile.write("\n")
我从解决方案中借用了代码,希望能正确解释它。我认为“n”应该是json对象占用的行数,但是
def lines_per_n(f, n):
for line in f:
yield ''.join(chain([line], itertools.islice(f, n - 1)))
def extract_cords_from_json(small=False):
if small == True:
data =[]
with open("txt_files/small_geo_json.txt") as infile:
for chunk in lines_per_n(infile, 52):
print(chunk)
jfile = json.loads(chunk)
下面是requests.get()调用中的json对象示例:
相当长。但是,运行我发布的函数的代码结果。。。
这并不像预期的那样有效。它产生的输出(我通过打印chunk
变量发现了这一点)实际上有105行(我的意思是,52*2=104,差不多)。105输出实际上没有两个完整条目。一个json对象的前52行,然后是一个空行,然后是另一个json对象的前29行
我得到的错误是:
json.decoder.JSONDecodeError:应使用双引号括起属性名:
第53行第1列(字符1598)
我还尝试使用并复制/粘贴了我的文本文件。它给出了以下错误,但我不知道它是什么意思
Error: Parse error on line 48:
...: "United States"} { "results": [{ "
----------------------^
Expecting 'EOF', '}', ',', ']', got '{'
您真的需要将一堆单独的JSON对象写入一个文件吗?为什么不只编写一个JSON对象,它是一个包含所有子对象的列表?是的,我不需要将它们全部保存到不同的JSON对象。我在谷歌搜索“python中的JSON数组”,但什么也没找到,所以我放弃了这样做的想法。所以我可以创建一个列表对象,将每个json对象附加到其中,然后保存它?您当然可以这样做。JSON中最外层的容器通常是一个对象,当加载到Python中时,它将成为一个dict,但是将最外层的容器作为列表是完全合法的。您可以在Python文件中将这些JSON另存为dict,我想事情会简单得多。如果您有任何唯一的id或键,请将其设置为dict key:save in this format
dict={“unique_key”:{“Extracted dict/JSON goes here”},以同样的方式在此处追加另一行}
@Rajan Sure,如果每个子对象都有一个唯一的键,那么将它们全部保存到dict中是有意义的。但是如果没有或需要这样的键,那么列表是完全可以的。
Error: Parse error on line 48:
...: "United States"} { "results": [{ "
----------------------^
Expecting 'EOF', '}', ',', ']', got '{'