You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JSON.stringify处理我的数组数组时返回空对象?

原因与解决方法

问题原因

$x(XPath)返回的不是普通二维数组,而是DOM元素节点组成的集合。这些DOM节点是浏览器内置的复杂对象,JSON.stringify序列化时仅会处理对象中可枚举的自有属性,但DOM元素的核心属性大多是不可枚举的访问器属性,或是存在循环引用(比如节点的parentNode指向父元素,父元素又包含子节点),因此序列化后会变成空对象{}。而普通数组里的基本类型或简单自定义对象不存在这些限制,所以能正常序列化。

解决方法

根据你需要提取的信息类型,针对性地将DOM节点转换为可序列化的简单结构:

1. 提取节点的特定属性(最常用)

遍历$x返回的节点集合,把每个节点转换成包含目标属性的数组或对象:

  • 提取节点文本内容:
const nodes = $x('//你的XPath表达式');
const textData = nodes.map(node => [node.textContent.trim()]);
copyText(JSON.stringify(textData));
  • 提取a标签的链接和文本:
const links = $x('//a');
const linkInfo = links.map(link => [link.href, link.textContent.trim()]);
copyText(JSON.stringify(linkInfo));

2. 序列化节点的可枚举属性

如果需要获取节点的基础属性(如标签名、ID、类名),可以手动挑选可序列化的属性,避开循环引用:

const nodes = $x('//你的XPath表达式');
const serializableNodes = nodes.map(node => ({
  tag: node.tagName,
  id: node.id,
  className: node.className
}));
copyText(JSON.stringify(serializableNodes));

内容的提问来源于stack exchange,提问作者d-b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:22:12