如何在python中将JavaScript解析为JSON?

2024-09-30 16:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

以下是代码片段:

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,但我不知道如何解析这些数据,因为分隔符或引号似乎总是有问题

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


Tags: 项目代码脚本语言json列表产品html
1条回答
网友
1楼 · 发布于 2024-09-30 16:37:57

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

以下代码段是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片段,如果执行该片段,将把一个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才能运行此操作。安装node后,请使用node yourFile.js运行文件。它应在同一目录中创建名为“output.json”的文件

相关问题 更多 >