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

如何使用Python json.load()方法访问从网站复制的JSON数据

类JSON预览文本Python解析方案

你复制的内容不是标准JSON格式,是浏览器开发者工具里折叠对象的预览文本,存在键名无双引号、…占位未展开内容、无顶层大括号包裹的问题,无法直接用json.load()/json.loads()解析,可按以下两种方案处理:


方案1:优先获取原始标准JSON(推荐)

当前你复制的是面板里的展开预览内容,不是接口返回的原始数据:

  • 打开浏览器开发者工具,切换到「Network」面板
  • 刷新页面找到对应数据接口,直接复制「Response」标签下的完整标准JSON
  • 拿到标准JSON后直接用json.loads()即可正常解析,零出错,是最稳妥的方案。

方案2:直接解析当前复制的预览文本

如果暂时拿不到原始接口数据,可通过正则逐行解析文本,跳过折叠的不完整行,组装成可直接按字段取值的字典结构,代码如下:

import re
from collections import defaultdict

def parse_preview_data(raw_text: str) -> dict:
    nodes = {}
    current_node = None
    # 匹配24位十六进制ID开头的新节点起始行
    node_start_re = re.compile(r'^([0-9a-f]{24}):\s*{')
    # 匹配字段行,支持字符串、数字两类值
    field_re = re.compile(r'^\s*(\w+):\s*(?:"([^"]+)"|(\d+))\s*$')

    for line in raw_text.splitlines():
        line = line.strip()
        # 跳过空行、带省略号的折叠预览行
        if not line or '…' in line:
            continue
        # 识别到新节点,初始化节点字典
        start_match = node_start_re.match(line)
        if start_match:
            nid = start_match.group(1)
            current_node = defaultdict(str)
            current_node["id"] = nid
            nodes[nid] = current_node
            continue
        # 提取当前节点的字段和值
        field_match = field_re.match(line)
        if field_match and current_node:
            key = field_match.group(1)
            value = field_match.group(2) if field_match.group(2) else int(field_match.group(3))
            current_node[key] = value
    return nodes


# 调用示例
if __name__ == "__main__":
    # 替换为你实际复制的文本内容
    copied_text = """
5b8e6b4b4f0ca1fbcd66e34e: {parentId: "52ff2e04e4b0b193ed664d45", nodeInfo: {position: 102,…}, id: "5b8e6b4b4f0ca1fbcd66e34e",…}
id: "5b8e6b4b4f0ca1fbcd66e34e"
name: "Parental Control"
nodeInfo: {position: 102,…}
description: "Companies that provide parental control solutions to keep children away from online risks"
position: 102
parentId: "52ff2e04e4b0b193ed664d45"
5b8e7c244f0c6c2263aaf8d2: {parentId: "5330677ae4b09e5482339b7a", nodeInfo: {position: 38,…}, id: "5b8e7c244f0c6c2263aaf8d2",…}
id: "5b8e7c244f0c6c2263aaf8d2"
name: "Anti Spyware"
nodeInfo: {position: 38,…}
description: "Companies that provides tools to remove spyware such as adware, keyboard loggers, hijackers etc"
position: 38
parentId: "5330677ae4b09e5482339b7a"
5b8f9d0f4f0c7c4d2daea8e8: {parentId: "52ff2e3de4b0b193ed664d4a", nodeInfo: {position: 42,…}, id: "5b8f9d0f4f0c7c4d2daea8e8",…}
id: "5b8f9d0f4f0c7c4d2daea8e8"
name: "Anti Theft"
nodeInfo: {position: 42,…}
description: "Companies that provide anti-theft solutions with features such as remote lock, remote wipe, theft detection etc"
position: 42
parentId: "52ff2e3de4b0b193ed664d4a"
    """
    data = parse_preview_data(copied_text)
    # 按你需要的逻辑提取字段
    for nid, x in data.items():
        parent = x["parentId"]
        name = x["name"]
        node_id = x["id"]
        print(f"节点ID:{node_id},名称:{name},父级ID:{parent}")

使用说明

  • 解析完成后返回的data是顶层以节点ID为键的字典,遍历后每个节点对象x都支持直接按x["parentId"]、x["name"]、x["id"]的方式取值,完全匹配你的使用需求
  • 带…的折叠预览行会被自动过滤,这些行是浏览器的缩写展示,下方已经有展开的完整字段,不会影响解析结果
  • 如果后续复制的内容包含布尔值、完整展开的嵌套对象等其他类型值,只要对应调整field_re的正则匹配规则即可扩展支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:18:20