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

data属性传入JSON对象后取值得到[object Object]无法访问的问题咨询

问题产生的根本原因

出现[object Object]返回值的核心问题,出在动态拼接DOM字符串的逻辑上:JS中当非字符串类型的对象和普通字符串做拼接运算时,会自动调用对象的默认toString()方法,普通对象的toString()固定返回[object Object]。你拼接DOM时直接把fileObj对象塞到data-details的属性值位置,实际存进DOM属性的根本不是对象的实际内容,就是这串无意义的固定字符串,后续不管怎么调用parse、stringify,都不可能从这串字符串里提取出原始对象的值。
另外你之前尝试的读取代码本身存在语法错误:$(this).(attr("data-details"))这里多了个多余的点,就算修正语法,因为属性内存储的不是合法JSON内容,也没法正常解析。

具体修复方案
  • 拼接DOM时,不能直接拼接原始对象,必须先把对象序列化成JSON字符串,同时对序列化后的字符串做编码处理,避免JSON内的特殊字符截断DOM属性的闭合引号
  • 读取属性值时,按照编码的逆流程解码、解析,拿到原始对象

修正后的循环拼接代码:

for (var i = 0; i < data.length; i++) {
  var fileObj = JSON.parse(data[i][2]);
  // 对存储的JSON做编码,避免特殊字符破坏DOM结构
  var encodedDetails = encodeURIComponent(JSON.stringify(fileObj));
  $($idName)
    .append('<a><li id="asdf" class="list-group-item" data-details="'
    + encodedDetails
    + '" data-filename="'
    + data[i][0]
    + '">'
    + fileObj.description
    + '</li></a>');
}

点击事件内读取存储值的逻辑:

// 先取属性值,解码后再解析JSON
var rawDetail = $(this).attr("data-details");
var det = JSON.parse(decodeURIComponent(rawDetail));
常见踩坑提醒
  • 绝对不要直接把原始对象拼接到DOM字符串的属性位置,这是[object Object]问题最常见的触发原因
  • 序列化后的JSON字符串如果包含双引号、尖括号、&等HTML特殊字符,不做编码直接存储,会直接撞破属性的闭合引号,导致DOM结构错乱、属性值截断
  • 不要混淆存储和读取的处理顺序:存储流程是 原始对象→JSON字符串→编码内容,读取必须按照 解码内容→JSON解析→原始对象的逆流程操作,顺序错误会直接导致解析失败

内容的提问来源于stack exchange,提问作者plzSOS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 21:54:06