Python如何提取JS文件中存储的变量并转为可下标访问的字典
解决方案
核心思路
直接open()得到的是文件IO对象,read()得到的是原始字符串,两者都没有做结构化解析,自然无法像字典一样访问。标准json模块仅能解析严格JSON格式内容,无法直接识别JS源码中的对象字面量语法(无引号键名、单引号、尾逗号等),不需要写全量正则做内容解析,用两步就能拿到可直接下标访问的Python字典:
- 从JS文本中定位到
county_info对应的对象片段 - 用支持JS对象语法的解析库将片段转为Python原生字典
方案1:轻量实现(推荐,99%场景可用)
用json5库做解析,它兼容绝大多数JS对象字面量语法,依赖轻量、解析速度快。
- 先安装依赖:
pip install json5
- 实现代码:
import json5 # 读取JS文件内容 with open(r'C:\file.js', 'r', encoding='utf-8') as f: js_text = f.read() # 定位county_info赋值起点 start_flag = "county_info = " start_pos = js_text.find(start_flag) + len(start_flag) # 用括号计数法定位对象结束位置,适配嵌套对象场景 bracket_level = 0 end_pos = start_pos for idx in range(start_pos, len(js_text)): if js_text[idx] == "{": bracket_level += 1 elif js_text[idx] == "}": bracket_level -= 1 if bracket_level == 0: end_pos = idx + 1 break # 解析为Python字典 county_info = json5.loads(js_text[start_pos:end_pos]) # 验证类型、支持下标访问 print(type(county_info)) # 输出 <class 'dict'> print(county_info["你的目标键名"])
说明:这里仅用字符串查找+括号计数定位片段,没有写复杂正则解析键值对,不会因为内容里有特殊字符、转义符出现匹配错误,鲁棒性远高于全量正则解析方案。
方案2:全语法兼容方案
如果JS文件里有json5不支持的特殊语法,可以用JS语法解析器直接把整个文件解析成语法树再提取数据,100%兼容标准JS语法。
- 安装依赖:
pip install pyjsparser
- 实现代码:
from pyjsparser import PyJsParser def js_node_to_py(node): """递归将JS语法树节点转为Python原生数据结构""" if node["type"] == "ObjectExpression": res = {} for prop in node["properties"]: # 兼容标识符键、字符串键两种场景 key = prop["key"].get("name", prop["key"].get("value")) res[key] = js_node_to_py(prop["value"]) return res elif node["type"] == "Literal": return node["value"] elif node["type"] == "ArrayExpression": return [js_node_to_py(elem) for elem in node["elements"]] return None with open(r'C:\file.js', 'r', encoding='utf-8') as f: js_text = f.read() # 解析JS为语法树 parser = PyJsParser() ast = parser.parse(js_text) county_info = None # 遍历语法节点找到county_info的声明 for node in ast["body"]: if node.get("type") == "VariableDeclaration": declare = node["declarations"][0] if declare["id"]["name"] == "county_info": county_info = js_node_to_py(declare["init"]) break # 直接下标访问即可 print(county_info["你的目标键名"])
内容的提问来源于stack exchange,提问作者stke
相关产品推荐
相关产品推荐

