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

如何将JSON格式字符串转为键值对对象?Jest环境报错替代方案

解决Jest环境下JSON字符串转对象的问题

我之前也碰到过类似的糟心事——浏览器里好好的JSON.parse到了Jest就报错,折腾了好一阵!既然你想通过拆分字符串的方式生成键值对对象,那咱们直接上可行方案,顺便聊聊问题根源。

首先针对你给出的字符串格式,直接上拆分实现的代码:

function convertStringToObject(str) {
  // 清理首尾空格并去掉外层大括号
  const content = str.trim().slice(1, -1);
  if (!content) return {};

  // 用正则按逗号分割键值对,避免误分割值里的逗号(比如值是"hello, world"的情况)
  const keyValuePairs = content.split(/,(?=(?:[^"]*"[^"]*")*[^"]*$)/);
  
  const result = {};
  keyValuePairs.forEach(pair => {
    // 分割键和值,同时清理两边空格
    const [keySegment, valueSegment] = pair.split(':').map(segment => segment.trim());
    
    // 去除键的双引号
    const key = keySegment.slice(1, -1);
    // 去除值的双引号,同时处理可能的转义引号
    const value = valueSegment.slice(1, -1).replace(/\\"/g, '"');
    
    result[key] = value;
  });

  return result;
}

// 测试你的示例
var objectString = '{"name": "Name", "description": "desc", "extra": "extra"}';
const obj = convertStringToObject(objectString);
console.log(obj.name); // 输出 "Name"
console.log(obj.description); // 输出 "desc"

为啥Jest里JSON.parse会报错?

你遇到的SyntaxError: Unexpected token o in JSON at position 1其实是个常见坑——这个错误通常说明你正在解析一个已经是对象的值,而非字符串。比如Jest环境中,HTML元素的dataset可能被自动转换,导致objectString实际是个对象,但你误以为它是字符串。不过你说直接访问objectString.name返回undefined,那大概率是字符串格式有细微差异(比如用了单引号、多余空格),导致JSON.parse失效。

更健壮的兜底方案

如果你的字符串可能有复杂格式(比如嵌套对象、值含逗号),纯拆分方法可能不够用。可以结合try-catch,先用JSON.parse尝试解析,失败了再用拆分方法兜底:

function safeParseObject(str) {
  try {
    return JSON.parse(str);
  } catch (error) {
    console.warn('JSON解析失败,使用拆分方法兜底:', error);
    return convertStringToObject(str);
  }
}

这样不管是浏览器还是Jest环境,都能大概率解决问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:12