我们都知道我们可以使用JSON.parse()
转换字符串'{"a":0,"b":"haha"}'
到对象{a: 0, b: 'haha'}
.
但是我们可以转换字符串吗'{a: 0, b: "haha"}'
到对象{a: 0, b: 'haha'}
?
我正在编写一个网络爬虫,我需要获取页面中的数据。但完整的数据不在 DOM 中而是在一个<script>
元素。所以我得到了有用的内容<script>
并转换该字符串(例如'window.Gbanners = [{...}, {...}, {...}, ...];'
)到类似 JSON 的字符串(例如'{banners : [...]}'
)。但是,我无法解析“类似 JSON”的字符串。有没有人有办法解决吗?
像这样的字符串{a: 0, b: "haha"}
不是 JSON,而只是一堆 JavaScript 代码。
获取内部数据的 JSON 表示的最佳方法是通过 JS 解析器运行它(例如Esprima),遍历语法树并从中构建一个 json 对象。这需要一些工作,但至少您可以正确完成解析,并正确处理转义序列。
这是一个起点:
const esprima = require("esprima");
const code = '({a: 0, b: "haha"})';
const ast = esprima.parse(code);
const properties = ast.body[0].expression.properties;
const output = properties.reduce((result, property) => {
result[property.key.name] = property.value.value;
return result;
}, {});
console.log(output);
此代码对输入代码的外观进行了很多假设 - 对于原型来说可能没问题,但仍然需要错误检查和处理嵌套对象。
(更通用的方法可能涉及递归函数,该函数需要ObjectExpression
并返回等效的 JSON。)
我还必须将您的输入括在括号中,以便根据 JS 语法它是一个表达式(而不是块语句)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)