如何封装json

本文介绍了几种常见的JSON封装方法,包括手动拼接字符串和使用流行框架如fastJSON进行封装的过程。对比了传统方式与使用框架的区别,并提供了具体示例。

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

封装json、比较流行的框架fastjson、gson、Jackson

通过传统方式自己拼接字符串JSON

 public static void main(String[] args) {
    setJSON();   
  }
 public static void setJSON() { 
    String str = "{\"errorCode\": \"0\",\"errorMsg\": \"调用接口成功\",\"data\": [{\"userName\": \"贺雷\",\"position\": \"网站技术负责人\",\"webAddres\": \"www.ithelei.com\"}]}";
    System.out.println(str);
 }

通过fastJSON封装JSON

 <!-- 添加阿里巴巴解析json工具类 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.1.26</version>
    </dependency>

   public static void main(String[] args) {
     setFastJSON();  
    }

   public static void setFastJSON() {
    JSONObject root = new JSONObject();//类似最外边的大括号
    root.put("errorCode", 0);//放入成员
    root.put("errorMsg", "调用接口成功");//放入成员
    JSONArray dataArr = new JSONArray();//数组
    
    JSONObject userhelei = new JSONObject();//对象
    userhelei.put("userName", "贺雷");
    userhelei.put("position", "技术网站负责人");
    userhelei.put("webAddres", "www.ithelei.com");
    dataArr.add(userhelei);//数组装对象
    root.put("data", dataArr);//对象装数组
    
    System.out.println(root.toJSONString());
}

<think>好的,用户让我介绍一下“JS封装JSON”,我需要先理解他们的具体需求。用户可能是在前端开发中遇到了如何将数据转换为JSON格式,或者如何封装JSON数据以便于网络传输或存储的问题。 首先,我应该明确JS中处理JSON的基本方法,比如JSON.stringify和JSON.parse,这是最基础的部分。然后,用户可能想知道如何更高效或更安全地封装JSON,比如处理循环引用、日期对象,或者添加自定义的序列化逻辑。此外,他们可能对封装成类或函数感兴趣,以便在项目中复用。 接着,我需要考虑用户可能的实际应用场景。例如,在与后端API交互时,正确封装JSON数据非常重要,可能涉及设置请求头、处理错误等。此外,用户可能遇到过深拷贝的问题,或者需要处理特殊数据类型,这些都需要在封装时考虑进去。 还要注意用户可能的误区,比如混淆JSON和普通JS对象,或者在序列化时忽略某些数据类型导致错误。因此,在介绍封装方法时,应该强调这些注意事项,并提供相应的解决方案,比如使用replacer函数或自定义的序列化方法。 另外,用户可能对性能优化感兴趣,比如在大量数据序列化时如何提高效率,或者如何压缩JSON数据减少传输体积。这也是封装时可以考虑的方面。 最后,我需要组织内容结构,从基础到进阶,逐步引导用户了解如何封装JSON,并提供代码示例和常见问题的解决方法。这样用户不仅能理解概念,还能实际应用到项目中。</think>### **JS 封装 JSON 详解** JSON(JavaScript 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、付费专栏及课程。

余额充值