Python:从一个txt文件解析多个JSON对象

时间:2018-06-28 16:46:43

标签: python json

我要改写这里提出的问题。 Python: Trying to Deserialize Multiple JSON objects in a file with each object spanning multiple but consistently spaced number of lines

和其他帖子。但是我是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 '{'

0 个答案:

没有答案