java链式创建json对象的实现

作者:鱼塘总裁 时间:2023-11-12 12:36:51 

我们主要介绍一下:java中如何通过最简单的方式实现链式创建json对象,解决创建json代码臃肿的问题。

1、假设我们要创建一个json对象格式如下:

{
   "code": 0,
   "msg": "SUCCESS"
}

2、往常创建JSON语法:

java中传统的创建json一般采用如下形式,先来看一个例子:

JSONObject res = new JSONObject();
res.put("code",0);
res.put("msg","SUCCESS");

这个例子中,每往json中加入一个元素都需要写一遍res.put,每行只能创建一个json的数据,这样比较繁琐,代码也很臃肿,是不是觉得很不科学。

如果你觉得这还能接受,那么你不妨试试二级json, * json,完整的写下来,你的代码能有几十行是毫不夸张的。

3、解决方案——链式创建JSON:

我们可以采用链式创建JSON的方法,例如下面例子:

JSONObject res1 = new YtJSONObject().put("code",0).put("msg","SUCCESS").getHome();

通过以上例子中,我们实现了链式创建JSON,每往JSON中加入一个元素,只需要在链式写法(也称链条语法)中写.put接上新元素即可。

这样我们就实现了链式创建JSON,好处是免去每次都写res.put的烦恼,创建一个完整的JSON对象只需要一行代码即可,这样代码就整洁清晰了很多。

以上例子中我们用到了一个类:YtJSONObject,这个类是将JSONObject类再次封装的一个加强类,通过.put元素链条写完后,最终采用.getHome获取得到JSONObject类对象,从而实现JSON的链式写法

如需获取JSON字符串,我们只需要使用JSONObject对象原有的方法,例如:

String str = new YtJSONObject().put("code",0).put("msg","SUCCESS").getHome().toString();

这里的.getHome()方法就是真正获取到了JSONObject类对象,同时也就支持了JSONObject类对象的一切方法,所以可以调用.toString()转为json字符串。

4、实现多级JSON

很多时候我们的json都不是一级的,还会有二级、 * 、无数级,此时使用传统的json声明语法只会时代码越来越多,作用却不大。

使用链式json如何实现呢,我们来看个例子:

JSONObject res2 = new YtJSONObject()
   .put("code",0)
   .put("msg","SUCCESS")
   .put("result",
       new YtJSONObject()
           .put("id",1)
           .put("url","a")
       )
   .getHome();

以上例子中我们实现了一个二级JSON,就是增加了一个result级别的json,直接在赋值的地方继续new YtJSONObject对象,然后继续向下使用链式写法即可,如果你还需要 * JSON甚至多级JSON也是同理。

为了让语法看起来更加清晰,我把链式写法格式化了一下,更容易看清楚,实际应用中不太长的JSON链式写法完全可以写在一行上。

5、YtJSONObject类源码

import com.alibaba.fastjson.JSONObject;

public class YtJSONObject {

private JSONObject home;

public YtJSONObject() {
       this.home = new JSONObject();
   }

public YtJSONObject put(String key, Object value) {
       home.put(key, value);
       return this;
   }

public JSONObject getHome() {
       return home;
   }
}

 该类只是增强了JSONObject类,使JSONObject类支持链式语法,并不是自行创建了一种JSON类类型,因此使用时还需要在pom.xml中引入一下fastjson

来源:https://www.cnblogs.com/phpyangbo/p/15882148.html

标签:java,链式,json
0
投稿

猜你喜欢

  • Java中的Static class详解及实例代码

    2023-12-24 18:19:40
  • Java适配器模式_动力节点Java学院整理

    2021-09-06 10:50:53
  • 浅谈JavaWeb中的web.xml配置部署描述符文件

    2023-11-12 00:14:13
  • C# 获取文件夹里所有文件名的详细代码

    2023-01-07 02:05:20
  • C# 中使用正则表达式匹配字符的含义

    2023-11-19 02:59:38
  • Java基于外观模式实现美食天下食谱功能实例详解

    2022-08-22 22:59:51
  • Java实现图片倒影的源码实例内容

    2022-08-30 02:39:24
  • Android使用TextView跑马灯效果

    2022-05-20 20:07:20
  • C#操作INI配置文件示例详解

    2021-11-06 11:03:01
  • Java实现微信红包分配规则

    2021-06-16 09:18:07
  • 如何在Android Studio下进行NDK开发

    2022-01-13 21:49:36
  • Java类和对象的设计原理

    2023-10-06 07:00:32
  • javaweb上传下载实例完整版解析(上)

    2021-07-31 05:40:23
  • Android自定义相机Camera实现手动对焦的方法示例

    2022-08-23 14:45:11
  • Unity实现俄罗斯方块(一)

    2021-06-07 15:30:24
  • Spring自定义参数解析器代码实例

    2023-07-02 15:08:06
  • Spring Security认证提供程序示例详解

    2022-11-07 18:06:40
  • C#实现系统休眠或静止休眠的方法

    2023-12-19 01:55:29
  • C#中定时任务被阻塞问题的解决方法

    2023-10-27 00:56:02
  • android命令行模拟输入事件(文字、按键、触摸等)

    2021-10-30 04:48:06
  • asp之家 软件编程 m.aspxhome.com