封装JSON

这段代码展示了如何使用JSONObject创建并填充一个JSON对象,包括添加电话号码、姓名、年龄、地址和婚姻状态等信息。地址是一个内嵌的JSONObject,而电话是一个JSONArray。最后,将整个JSON对象打印出来。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSONObject person = new JSONObject();//第一个键phone的值是数组,所以需要创建数组对象
JSONArray phone = new JSONArray();
phone.add(“87654321”);
person.put(“phone”, phone);//保存姓名年龄
person.put(“name”,“yuanzhifei89”);
person.put(“age”, 100);//键address的值是对象,所以又要创建一个对象
JSONObject address = new JSONObject();
address.put(“country”, “china”);
address.put(“province”,“jiangsu”);
person.put(“address”, address);
person.put(“married”, false);
System.out.println(person);

<think>好的,用户让我介绍一下“JS封装JSON”,我需要先理解他们的具体需求。用户可能是在前端开发中遇到了如何将数据转换为JSON格式,或者如何封装JSON数据以便于网络传输或存储的问题。 首先,我应该明确JS中处理JSON的基本方法,比如JSON.stringify和JSON.parse,这是最基础的部分。然后,用户可能想知道如何更高效或更安全地封装JSON,比如处理循环引用、日期对象,或者添加自定义的序列化逻辑。此外,他们可能对封装成类或函数感兴趣,以便在项目中复用。 接着,我需要考虑用户可能的实际应用场景。例如,在与后端API交互时,正确封装JSON数据非常重要,可能涉及设置请求头、处理错误等。此外,用户可能遇到过深拷贝的问题,或者需要处理特殊数据类型,这些都需要在封装时考虑进去。 还要注意用户可能的误区,比如混淆JSON和普通JS对象,或者在序列化时忽略某些数据类型导致错误。因此,在介绍封装方法时,应该强调这些注意事项,并提供相应的解决方案,比如使用replacer函数或自定义的序列化方法。 另外,用户可能对性能优化感兴趣,比如在大量数据序列化时如何提高效率,或者如何压缩JSON数据减少传输体积。这也是封装时可以考虑的方面。 最后,我需要组织内容结构,从基础到进阶,逐步引导用户了解如何封装JSON,并提供代码示例和常见问题的解决方法。这样用户不仅能理解概念,还能实际应用到项目中。</think>### **JS 封装 JSON 详解** JSONJavaScript Object Notation)是 JavaScript 中轻量级的数据交换格式。在 JS 中,“封装 JSON”通常指 **将数据转换为 JSON 字符串** 或 **解析 JSON 字符串为 JS 对象**,并在此过程中进行安全处理或功能扩展。以下是核心知识点和实用封装方法: --- ### **一、基础操作** #### 1. **序列化(对象JSON 字符串)** 使用 `JSON.stringify()`: ```javascript const user = { name: "张三", age: 25, isAdmin: true, skills: ["JavaScript", "Python"] }; const jsonStr = JSON.stringify(user); // 输出: {"name":"张三","age":25,"isAdmin":true,"skills":["JavaScript","Python"]} ``` #### 2. **反序列化(JSON 字符串 → 对象)** 使用 `JSON.parse()`: ```javascript const jsonStr = '{"name":"李四","age":30}'; const userObj = JSON.parse(jsonStr); console.log(userObj.name); // 输出: 李四 ``` --- ### **二、进阶封装技巧** #### 1. **处理复杂数据类型** JSON 不支持 `Date`、`undefined`、`函数`等类型。可通过 **`replacer` 参数** 自定义序列化逻辑: ```javascript const data = { date: new Date(), fn: function() { return "test"; } }; const jsonStr = JSON.stringify(data, (key, value) => { if (value instanceof Date) { return value.toISOString(); // 日期转为字符串 } else if (typeof value === 'function') { return value.toString(); // 函数转为源码字符串 } return value; }); // 输出: {"date":"2023-08-30T02:00:00.000Z","fn":"function() { return \"test\"; }"} ``` #### 2. **安全解析(防 JSON 注入)** 直接使用 `JSON.parse()` 可能引发异常,需封装错误处理: ```javascript function safeParse(jsonStr) { try { return JSON.parse(jsonStr); } catch (error) { console.error("JSON 解析失败:", error); return null; // 或返回默认值 } } ``` #### 3. **深拷贝对象** 通过 JSON 转换实现简单深拷贝(注意:无法克隆函数、Symbol 等): ```javascript const original = { a: 1, b: { c: 2 } }; const copy = JSON.parse(JSON.stringify(original)); copy.b.c = 3; console.log(original.b.c); // 输出: 2(原对象未受影响) ``` --- ### **三、封装成工具类** #### **示例:JSON 工具库** ```javascript class JSONUtils { // 安全序列化(处理循环引用) static safeStringify(obj, indent = 2) { const seen = new WeakSet(); return JSON.stringify(obj, (key, value) => { if (typeof value === 'object' && value !== null) { if (seen.has(value)) return '[Circular Reference]'; seen.add(value); } return value; }, indent); } // 带类型恢复的解析(如 Date) static parseWithReviver(jsonStr) { const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/; return JSON.parse(jsonStr, (key, value) => { if (typeof value === 'string' && dateRegex.test(value)) { return new Date(value); // 自动恢复日期对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值