1

我正在尝试解析包含巨大 JavaScript 数组的 JavaScript 对象的代码,并将其转换为带有列表的 Python 字典。

目前我正在使用 PyYaml,但这并不能直接工作,因为它无法处理连续的逗号(例如,它在 '[,,,0,]' 上中断:预期节点内容,但发现 ', ')。所以我把这些替换掉了,但这一切都很慢。我想知道你们中是否有人知道更好更快的方法来做到这一点。JSON 解码不起作用,因为 JavaScript 代码也不是 JSON 有效的。

这是我正在使用的代码,如上所述,以 js_obj 为例:

js_obj = "{index: '37',data: [, 1, 2, 3,,,]}"

def repl(match):
    content = re.sub(" ", "",match.group(0))
    length = len(content) - 1
    result = ''
    if content[0] == '[':
        result = '[""'
        length -= 1

    after = ','
    if content[-1] == ']':
        length -= 1
        after += '""]'

    return result + (',""' * length) + after

py_dict = yaml.load(re.sub('\[? *(, *)+\]?', repl, js_obj))
4

1 回答 1

1

您可能应该使用 JSON 从 JavaScript 写入数据,然后以 JSON 将其读入 Python。YAML 没问题,但我更喜欢 JSON 而不是 YAML;JSON 更加一致。

如果您必须解析 JavaScript,您可能需要研究 pyparsing 或类似的东西。

于 2013-07-27T19:10:56.107 回答