gpt4 book ai didi

javascript - 如何将类 JSON(不是 JSON)字符串转换为对象?

转载 作者:行者123 更新时间:2023-11-30 07:12:36 24 4
gpt4 key购买 nike

我们都知道我们可以使用 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);

这段代码假设了很多关于输入代码的样子——对于原型(prototype)来说可能没问题,但仍然需要错误检查和处理嵌套对象。

(更通用的方法可能涉及一个递归函数,该函数采用 ObjectExpression 并返回等效的 JSON。)

我还必须将您的输入括在括号中,以便根据 JS 语法它是一个表达式(而不是 block 语句)。

关于javascript - 如何将类 JSON(不是 JSON)字符串转换为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49112325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com