簡體   English   中英

如何在 python 中將 JavaScript 解析為 JSON?

[英]How would I parse JavaScript to JSON in 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 但我不知道如何解析這些數據,因為分隔符或引號似乎總是存在問題。

是否有任何有效功能至少可以幫助我識別/解析此代碼?

你有一個 object 可以序列化成 JSON 數據,但它不是 JSON 本身。 讓我解釋一下區別。

以下片段位於 Javascript 中。

這是 Javascript object 的示例,可以序列化為 JSON

{ x: 2 }

以下字符串是 JSON 格式數據的示例。 (請注意,JSON 數據本身只是一個以非常特定的方式格式化的字符串。JSON 始終只是一個字符串,就像 XML 一樣)

'{"x":2}'

The following is an example of serializing a Javascript object into JSON format (ie we're turning an object into a JSON string).

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

看到不同? 你會發現網上很多人稱 JSON 可序列化數據為“JSON”(這很好,有時人們說話很懶,或者不完全理解),但從技術上講,它不是 JSON,它只是可以轉換成的數據JSON 如果需要(例如,帶有函數的 object 不是 JSON 可序列化的 - 你真的不能將函數編碼為字符串)。

話雖如此,您所得到的只是 Javascript 的一個片段,如果執行,它將把一個 JSON 可序列化的 object 放入一個變量中。 但是,此源代碼本身不包含格式正確的 JSON 數據(例如,引號必須是雙引號 - JSON 中不允許使用單引號)。 因此,沒有 JSON 解析實用程序能夠對其進行操作。

不幸的是,您將不得不手動解析這些數據,這可能需要做一些工作。 工作量取決於您的需求。 如果您要做的只是從該數據中提取一個特定屬性,那么可能只需對適當的鍵進行正則表達式搜索,然后提取值(不過,您必須知道您的鍵是尋找不會出現在對象的其他任何地方)。

更新:

If all you're wanting to do is extract the JSON data and save it off somewhere else, then maybe it would be better to do it in Javascript instead of python, as what you're dealing with is Javascript source code. 這是你可以做的。

編輯 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 yourFile.js運行文件。 它應該在您的同一目錄中創建一個名為“output.json”的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM