我需要从一个JSON对象中提取值,该对象位于HTML文件的脚本标记中。HTML实际上是一个电子邮件(.eml)文件。
我使用node的“fs”模块来读取文件,运行良好。通常,我知道如何选择HTML元素(使用document.getElementById
、innerHTML
等),以及如何通过JSON对象层次结构来选择值(使用JSON.parse
和点标记法等)。但是,我不确定如何从这样的代码中选择值。
X-Account-Key: account31
X-UIDL: 00001b5f073425
X-Mozilla-Status: 0000
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:
... more email header info ...
<html lang=3D"en-US"> <head> </head> <body> <div> <script data-scope=3D"in=
boxmarkup" type=3D"application/json">{
"api_version": "1.0",
"publisher": {
"api_key": "67892787u2cfedea31b225240gg3423t9",
"name": "Google Alerts"
},
"cards": [ {
"title": "Google Alert - \"search keywords\"",
"subtitle": "Highlights from the latest email",
"actions":
... and so on with JSON object, then closing script tag...
... email body wrapped in DIV tag ...
如果我想从这段代码中获取publisher.name
或任何其他属性的值,该怎么办?
任何和所有的指针赞赏。
1条答案
按热度按时间kmpatx3s1#
您需要执行以下步骤:
1.阅读电子邮件文件(您已经在这样做了)
1.解析电子邮件文件并从中获取HTML正文
1.解析该HTML定义的DOM
1.选择
script
元素1.获取其文本内容
1.通过
JSON.parse
解析它1.从结果对象访问属性
您已经读取了该文件,但为了完整起见,下面是一个通过
fs/promises
模块的readFile
读取该文件的示例:然后我们需要解析它。正如您在注解中提到的,有一个
mailparser
npm
模块可以完成此任务:然后我们需要获取HTML主体并解析它。这里我使用的是
jsdom
:然后我们可以在
dom.window.document
上使用querySelector
来选择script
元素:如果有多个属性,则可能需要添加更多属性以缩小范围,例如:
一旦有了
script
元素,就可以通过.textContent
访问其文本内容。获得文本后,可以使用
JSON.parse
解析它。一旦有了对象,
obj.publisher.name
应该会给出所需的值。因此: