如何将类似 JSON(非 JSON)的字符串转换为对象?

2023-12-07

我们都知道我们可以使用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(使用前将#替换为@)

如何将类似 JSON(非 JSON)的字符串转换为对象? 的相关文章

随机推荐

  • 如何使用 node、express 和 ejs 包含 css 文件?

    我正在尝试按照说明进行操作https stackoverflow com a 18633827 2063561 但我仍然无法加载 styles css 来自 app js app use express static path join d
  • Angular js 指令中的后链接与预链接

    正如这里所概述的 http docs angularjs org guide directive Angular js 指令采用两种不同类型的链接函数 预链接功能 在链接子元素之前执行 进行 DOM 转换并不安全 因为编译器链接函数将无法找
  • Deepcopy pandas DataFrame 包含 python 对象(例如列表)

    需要帮助理解变量赋值 指针 以下是可重现的 import pandas as pd df pd DataFrame listData c f d a e b 5 2 1 4 3 df listDataSort df listData giv
  • 如何使用 ActionScript 拖动图像以使其在屏幕上平滑移动?

    我以为这是一个简单的任务 但我错了 我使用精灵来显示图像 当用户拖动它 MOUSE DOWN和MOUSE MOVE 时 我得到了位置MOUSE MOVE并计算偏移量 var current Point new Point event loc
  • Android 多个联系人选择器(可以选择电话号码)

    我需要能够在 Android 中选择多个联系人 流程是这样的 用户单击打开联系人应用程序的按钮 但是 我需要能够选择多个联系人 在同一意图启动中 而不是能够选择单个联系人 如果联系人有多个电话号码 我需要用户能够选择他想要选择的电话号码 当
  • 如何在基于事件的设计中使用 Azure Batch 并终止/清理已完成的作业

    使用 Azure Batch 我的项目使用带有函数和队列的基于事件的设计将作业添加到池中 当作业完成时 即使所有任务都已完成 它仍然是 活动的 在计时器上触发 单个使用应用程序服务计划 功能 该计时器从队列中读取 X 数量的消息 功能 创建
  • 有 Ruby WIN32OLE API 的标准指南吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我对此进行了很多搜索 但还没有任何关于 Ruby 中的 Win32Ole 的标准或相当系统的指南 David 的 Ruby on windows 非常好 但我需要一个关于 WIN32
  • 如何从 UIWebView 获取 URL 的哈希片段

    我正在尝试获取 UIWebView 中加载的 URL 的哈希片段 我尝试了不同的方法 但它似乎不起作用 例如 如果 UIWebView 加载了 http www mysite com home main NSURL url NSURL UR
  • 无法读取未命名的模块

    我遇到了非常棘手的问题 我不明白 我们有一整套用 jdk8 编写的 util 库 与 jigsaw 没有关系 因此我们也没有在 META INF 文件中设置自动模块名称 现在我们需要将使用这些实用程序库的产品迁移到 java11 我创建了一
  • 在封闭范围内定义的局部变量必须是最终的或有效最终的

    我正在尝试打印出百分比x mol 但我似乎无法让它发挥作用 我收到此错误 Local variable x defined in an enclosing scope must be final or effectively final 它
  • 防止 Designer.cs 中特定行的自动代码更改

    我在 Designer cs 中做了一个简单的更改 即 this dateTimePicker MaxDate DateTime Now 但每当我对表单设计进行一些更改时DateTime Now被当前日期时间值替换 如何防止这种自动代码更改
  • 如何制作动态大小的数据表?

    我使用的是 Excel 2010 我有一个与此类似的 每月 数据表 MonthBegin InventoryExpenses Overhead TotalSales TotalSalesIncome TotalProfit July 11
  • 如何在phonegap中连接到mysql数据库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 任何人都可以向我展示如何连
  • AJAX 响应错误:net::ERR_EMPTY_RESPONSE

    CODE 前端 document ready function delete post on click function var id this data id var section this data section var url
  • 使浮动子项在溢出之外可见:隐藏父项

    在 CSS 中overflow hidden设置在父容器上 以便使其能够随着浮动子容器的高度而扩展 但与它结合使用时 它还有另一个有趣的功能margin auto 如果 PREVIOUS 同级元素是浮动元素 它实际上会与其并列显示 也就是说
  • WPF C# 当前控件工具提示中的状态栏标签内容

    好的 所以我试图弄清楚如何设置状态栏标签文本以显示有关鼠标悬停在其上的当前控件的信息 我在许多程序中多次看到过这种情况 所以我知道这是可以完成的 并且我确信那里有可以帮助我的解释 但不幸的是我似乎找不到合适的词来搜索答案 我能找到的最接近的
  • Grails:从 GSP 生成 PDF

    我的 GSP 页面有多个表格以及一些其他 HTML 元素 例如输入文本字段和标题 h1 h2 texts 我希望所有这些信息都被捕获在生成的文本中 到目前为止 我看到的示例仅适用于生成一张表 有没有一种快速方法可以从 GSP 中已填充的所有
  • BackgroundWorker DoWork 线程的堆栈大小是多少?有办法改变吗?

    我知道 C 主程序的堆栈大小为 1 MB 32 位和任意位 或 4 MB 64 位 请参阅为什么 C 中的堆栈大小正好是 1 MB 默认堆栈大小是多少BackgroundWorker DoWork thread 有没有办法改变堆栈大小Bac
  • 如何使用opencv库将3D矩阵的元素归零?

    我正在努力使用 opencv 将 3D 矩阵的元素归零 我可以将二维矩阵中的所有元素归零 如下所示 meta new Mat Mat zeros cluster 3 CV 32S 我尝试使用类似的方式来初始化 3D 矩阵中的 0 元素 但失
  • 如何将类似 JSON(非 JSON)的字符串转换为对象?

    我们都知道我们可以使用JSON parse 转换字符串 a 0 b haha 到对象 a 0 b haha 但是我们可以转换字符串吗 a 0 b haha 到对象 a 0 b haha 我正在编写一个网络爬虫 我需要获取页面中的数据 但完整