JavaScript 自定义函数将对象转换为标准 JSON 字符串

Owen
Owen
发布时间:2026-10-13 | 3人浏览过
原创

在 JavaScript 开发中,有时需要将对象转换为标准化的字符串格式(如 JSON)。本文将介绍一个自定义的 obj2str 函数,通过递归方式处理对象与数组,并实现基础的特殊字符转义。

实现原理与逻辑分析

该函数的核心在于递归遍历对象的属性,并根据数据类型返回对应的格式化字符串。主要包含以下关键步骤:

  1. 类型判断:首先检查传入参数是否为字符串、对象或普通值。
  2. 字符串处理:对普通字符串进行特殊字符(如引号、换行符、制表符)的转义包裹。
  3. 对象处理:若为对象且无排序特征,则构建 {key:value} 形式的字符串;若存在 toString 方法的差异(如 DOM 节点),则单独追加该方法定义。
  4. 数组处理:若具备 sort 方法(即 Array 实例),则递归处理内部元素并包裹方括号 []。

核心代码实现

以下是完整的函数实现代码。请注意,此代码依赖于浏览器环境的特性(如 document.all 的检测)来进行兼容处理。

function obj2str(o){ 
var r = []; 
if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\""; 
if(typeof o == "object"){ 
if(!o.sort){ 
for(var i in o) 
r.push(i+":"+obj2str(o[i])); 
if(!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)){ 
r.push("toString:"+o.toString.toString()); 
} 
r="{"+r.join()+"}" 
}else{ 
for(var i =0;i<o.length;i++) 
r.push(obj2str(o[i])) 
r="["+r.join()+"]" 
} 
return r; 
} 
return o.toString(); 
}

调用示例

你可以直接在控制台中测试该函数的表现,例如:

// 简单对象转换
var data = {name: 'John', age: 25};
console.log(obj2str(data));
// 输出类似: "{name:\"John\":age:25}" (注:原代码拼接方式可能导致 key 之间缺少逗号分隔,实际使用时建议配合后端解析或修正拼接逻辑)

// 嵌套对象转换
var user = { 
  info: { id: 1 }, 
  skills: ['JS', 'Java'] 
};
console.log(obj2str(user));

注意事项与兼容性说明

  • 现代替代方案:在现代浏览器及 Node.js 环境中,强烈建议使用原生的 JSON.stringify() 方法,它经过高度优化且完全符合 ECMAScript 标准。
  • 语法缺陷:上述 obj2str 函数在拼接对象键值对时,使用的是冒号而非标准的 "key":"value" 格式,且在多层级间未添加逗号分隔符。这导致输出结果并非合法的 JSON 字符串,仅是一种类 JSON 的结构化文本。如果需要合法的 JSON,请务必使用原生 API。
  • 安全警告:如果该字符串后续用于执行脚本(如 eval),请确保数据来源安全,避免注入风险。
以上就是将 JavaScript 对象转换为字符串的详细内容,更多关于 JS 数据处理与序列化技巧的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表