如何使用jQuery提取含多值的指定结构JSON数据?
问题分析与解决方案
首先,你遇到的核心问题是后端返回的不是标准JSON格式——它是将多个键值对(键名+JSON对象)用空格拼接在一起的字符串,而不是一个完整的、可直接解析的JSON对象。这也是为什么你直接把data赋值给obj后,遍历只能得到部分内容的原因。
解决步骤
我们需要先把这个非标准的响应字符串转换成标准JSON,再进行解析和遍历。具体代码修改如下:
$.get('url_request.php?' + $(this).serialize(), function(data) { // 1. 把非标准字符串转换为标准JSON格式 let formattedData = data // 替换 "KLOBS {" 为 "\"KLOBS\": {" .replace(/(\w+)\s*({)/g, '"$1": $2') // 替换 "} KL15 {" 为 "}, \"KL15\": {" .replace(/}\s*(\w+)\s*{/g, '}, "$1": {') // 包裹成完整的JSON对象 .replace(/^/, '{').replace(/$/, '}'); // 2. 解析JSON(加try-catch避免解析失败报错) let obj; try { obj = JSON.parse(formattedData); } catch (error) { console.error('JSON解析失败:', error); return; } // 3. 遍历所有键值对 $.each(obj, function(key, value) { console.log('当前键:', key); console.log('对应值:', value); // 如果值是数组,还可以进一步遍历内部元素 if (Array.isArray(value)) { console.log(`${key} 的数组元素:`); value.forEach(item => console.log('-', item)); } }); });
额外建议
如果可以的话,最好让后端直接返回标准JSON格式,比如:
{ "KLOBS": {"SL_VEF_APPLIED_VS_BOL_R1_KLOBS":["0.00247320692497939","0.000008129750823137272"]}, "KL15": {"SL_VEF_APPLIED_VS_BOL_R1_KL15":["0.01890831252229754","0.9008162336184189"]} }
这样前端不需要额外处理字符串,直接解析即可,代码会更简洁可靠。
内容的提问来源于stack exchange,提问作者Maestro Vladimir
相关产品推荐
相关产品推荐

