和其他帖子。但是我是JSON的新手,我不太了解应该使用多少个功能,尤其是适合我的目的。我也在用numpy和pandas进行python 3的开发,并且很好奇是否有任何函数可以简化此过程。
我正在尝试保存来自Google Maps API的多个请求。该API返回一个约52行的JSON对象(一个字典)。我有一个很大的数据集,我希望能得到大约5000个这些JSON对象。我创建了一个函数,将所有json对象写入一个txt文件。我在每个json对象之间都有一个换行符。这是它的代码...所有这些都处于循环中,不断向Google Maps API发出请求
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对象:
{
"results": [
{
"address_components": [
{
"long_name": "United States",
"short_name": "US",
"types": [
"country",
"political"
]
}
],
"formatted_address": "United States",
"geometry": {
"bounds": {
"northeast": {
"lat": 71.5388001,
"lng": -66.885417
},
"southwest": {
"lat": 18.7763,
"lng": 170.5957
}
},
"location": {
"lat": 37.09024,
"lng": -95.712891
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 49.38,
"lng": -66.94
},
"southwest": {
"lat": 25.82,
"lng": -124.39
}
}
},
"place_id": "ChIJCzYy5IS16lQRQrfeQ5K5Oxw",
"types": [
"country",
"political"
]
}
],
"status": "OK",
"tweet_id": 974072,
"manual_location": "United States"
}
很长。但是,通过运行我发布的功能得到的代码结果是...
这并不完全符合预期。它产生的输出(我通过打印chunk
变量发现了这一点)实际上有105行(我的意思是52 * 2 =104。这很接近)。 105输出实际上没有两个完整的条目。似乎有一个json对象的前52行,然后有一个空白行,然后是另一个json对象的前29行。
我得到的错误是:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes:
line 53 column 1 (char 1598)
我还尝试使用https://jsonlint.com/并复制/粘贴了我的文本文件。它给出了以下错误,但我不知道这意味着什么。
Error: Parse error on line 48:
...: "United States"} { "results": [{ "
----------------------^
Expecting 'EOF', '}', ',', ']', got '{'