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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:59:53