【问题标题】:How would I parse JavaScript to JSON in python?如何在 python 中将 JavaScript 解析为 JSON?
【发布时间】:2021-08-21 03:35:40
【问题描述】:

我有一个 html 页面,其中包含一组项目的整个产品列表。由于页面太大,无法上传。不幸的是,产品位于脚本部分,更具体地说,位于一个变量中。

起初我以为这是纯 JSON,但是,在多次尝试使用 json.loads 和 pyjson5.loads 解码响应后,我认为它或多或少是该语言的语法。

这是一个sn-p的代码:

window.INIT_STATE = 'configuration': {'navigationData': {'catalog': {'id': 1, 'active': 1, 'tenant': 'pyStore', 'type': 'catalog', 'name': 'Initial catalog', 'version': '2021-06-02T16:26:56.446Z', 'nav': 

我仍然不能完全确定这是 JavaScript 还是 JSON,但我不知道如何解析这些数据,因为分隔符或引号似乎总是存在问题。

是否有任何有效的函数至少可以帮助我识别/解析这段代码?

【问题讨论】:

    标签: javascript python html json


    【解决方案1】:

    你有一个可以序列化为 JSON 数据的对象,但它不是 JSON 本身。让我解释一下区别。

    以下sn-ps是Javascript。

    这是一个可以序列化为 JSON 的 Javascript 对象示例

    { x: 2 }
    

    以下字符串是 JSON 格式数据的示例。 (请注意,JSON 数据本身只是一个以特定方式格式化的字符串。JSON 始终只是一个字符串,就像 XML 一样)

    '{"x":2}'
    

    以下是将 Javascript 对象序列化为 JSON 格式的示例(即我们将对象转换为 JSON 字符串)。

    > JSON.stringify({ x: 2 })
    '{"x":2}'
    

    看到区别了吗?你会发现很多人在网上称 JSON 可序列化数据为“JSON”(这很好,有时人们说话会变得懒惰,或者不完全理解),但从技术上讲,它不是 JSON,它只是可以转换成的数据JSON 如果需要(例如,具有函数的对象不是 JSON 可序列化的 - 你真的不能将函数编码为字符串)。

    话虽如此,你所得到的只是一个 Javascript 的 sn-p,如果执行它将把一个 JSON 可序列化的对象放入一个变量中。 然而,此源代码本身不包含格式正确的 JSON 数据(例如,引号必须是双引号 - JSON 中不允许使用单引号)。因此,没有 JSON 解析实用程序能够对其进行操作。

    不幸的是,您将不得不手动解析这些数据,这可能需要做一些工作。工作量取决于您的需求。如果您想要做的只是从该数据中提取一个特定属性,那么可能只需对适当的键进行正则表达式搜索,然后提取值(不过,您必须知道 您要查找的键不会出现在对象的其他任何位置)。

    更新:

    如果您只想提取 JSON 数据并将其保存在其他地方,那么使用 Javascript 而不是 python 可能会更好,因为您正在处理的是 Javascript 源代码。这是您可以执行的操作。

    编辑 HTML 文件并取出除此 JSON 可序列化结构之外的所有内容,将 window.INIT_STATE 更改为 const INIT_STATE,并在文件末尾添加以下内容:

    const INIT_STATE = ...your giant JSON-serializable structure...
    
    require('fs').writeFileSync('./output.json', JSON.stringify(INIT_STATE), 'utf-8')
    

    将您的 html 文件重命名为具有“.js”文件扩展名。

    您需要安装节点才能运行它。安装节点后,使用node yourFile.js 运行文件。它应该在您的同一目录中创建一个名为“output.json”的文件。

    【讨论】:

    • 正是我想要避免的,数据量很大。不要以为我能应付。感谢您的回复,非常有帮助。
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多