You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析Instagram数据时遭遇JSON未终止字符串错误求助

问题:Instagram HAR文件JSON解析报错(未闭合字符串)

我正在解析从Instagram获取的数据,用于生成Gephi可可视化的社交图谱。每个账号对应./data/{person}/following.har和./data/{person}/profile.json文件。在将数据提取到./out/people.json时,反复遇到错误:

json.decoder.JSONDecodeError: Unterminated string at: line 1067001 column 26 (char 87399905)

错误发生在代码的data = json.loads(f.read())行。我尝试过用ftfy工具修复,但没有效果。报错的行内容为:
"url": "https://static.cdninstagram.com/rsrc.php/v3ikSh4/yq/l/en_US/ueR5Vvb4hPlbfkjYLCs4rGemD-jplRG0pz

以下是未使用ftfy的代码:

import json
import os
import re
import base64

def extract_profile(data) -> list:
    return data['graphql']['user']

def extract_followings(data) -> list:
    friendship_api_url = r'https://i.instagram.com/api/v1/friendships/.*/following'

    contents = [entry['response']['content'] for entry in data['log']['entries']
                if re.match(friendship_api_url, entry['request']['url'])]

    # extract json data
    users = []
    for content in contents:
        if 'text' not in content:
            continue
        text = content['text']

        if 'encoding' in content:
            encoding = content['encoding']
            if encoding == 'base64':
                decodedBytes = base64.b64decode(text)
                decodedStr = str(decodedBytes, 'utf-8')
                user_json = json.loads(decodedStr)
                users.extend(user_json['users'])
        else:
            user_json= json.loads(text)
            users.extend(user_json['users'])
    
    return users

def extract_person(person: str):
    with open(f'./data/{person}/following.har', 'r', errors='ignore') as f:
        data = json.loads(f.read())
        followings = extract_followings(data)

    with open(f'./data/{person}/profile.json', 'r') as f:
        data = json.loads(f.read())
        profile = extract_profile(data)

    output = {
        'general': profile,
        'followings': followings
    }
    return output, profile['id']

def extract_all():
    persons = os.listdir('./data')

    users = {}
    for person in persons:
        output, id = extract_person(person)
        users[id] = output

    with open('./out/people.json', 'w') as f:
        f.write(json.dumps(users))

extract_all()
解决方案

这个错误是HAR文件导出时出现截断,导致JSON字符串未完全闭合(url字段的引号未结束)。可以尝试以下几种修复方式:

1. 手动修复报错行

找到报错的第1067001行,补全url字段的闭合引号。如果内容确实缺失,可以直接删除这个不完整的键值对,或者用占位符替换,比如:
"url": "https://static.cdninstagram.com/rsrc.php/placeholder"

2. 正则自动修复不完整JSON

在读取HAR文件后,先通过正则修复常见的截断问题:

import re

def fix_truncated_json(raw_text):
    # 修复未闭合的双引号字符串
    raw_text = re.sub(r'"([^"]*)$', r'"\1"', raw_text)
    # 移除末尾多余的逗号
    raw_text = raw_text.rstrip(',')
    # 补全未闭合的大括号/中括号
    open_braces = raw_text.count('{') - raw_text.count('}')
    open_brackets = raw_text.count('[') - raw_text.count(']')
    raw_text += '}' * open_braces + ']' * open_brackets
    return raw_text

修改读取HAR文件的代码:

with open(f'./data/{person}/following.har', 'r', errors='ignore') as f:
    raw_text = f.read()
    fixed_text = fix_truncated_json(raw_text)
    data = json.loads(fixed_text)
    followings = extract_followings(data)

3. 使用容错JSON解析库

用支持容错解析的库跳过语法错误,比如demjson:
先安装依赖:

pip install demjson

替换解析代码:

import demjson

with open(f'./data/{person}/following.har', 'r', errors='ignore') as f:
    data = demjson.decode(f.read())
    followings = extract_followings(data)

4. 重新导出完整HAR文件

如果是浏览器导出时中途中断导致的截断,建议重新导出:在浏览器开发者工具的网络面板,等待所有请求加载完成后再导出HAR文件,避免中途停止。

内容的提问来源于stack exchange,提问作者Macabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:01:17