我们主要介绍一下: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

java链式创建json对象的更多相关文章

  1. Java 链式编程

    这里来做一个Java 链式编程的例子,基本就是每次返回一个对象本身,这样就能够去调用对象的方法和属性. package com.sun; public class Demo05 { /** * @pa ...

  2. js如何创建JSON对象

    js如何创建JSON对象 一.总结 一句话总结:直接创建js数组和js对象即可,然后JSON.stringify就可以获取json字符串,js中的一切都是对象,而且js中的对象都是json对象 js ...

  3. Java 链式写法

    Java链式写法,子类继承父类的属性,也可以返回子类的对象,只是需要重写基类的Set方法 public class MyLS { public static void main(String[] ar ...

  4. java根据url获取json对象

    package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; ...

  5. 简单使用JSON,JavaScript中创建 JSON 对象(一)

    JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. ...

  6. java 如何对由json对象构成的数组形式的字符串进行遍历?

      1.情景展示 现在已知字符串为: [{"name":"微微笑","img":"http://zos.alipayobjects ...

  7. javascript学习-创建json对象数据,遍历

    之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...

  8. 创建json对象

    jQuery创建json对象 方法二: <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  9. Java链式写法

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11613067.html Java 链式写法:详细看代码 package chain; /** ...

随机推荐

  1. iNeuOS工业互联网操作系统,增加DTU与平台实时交互的应用场景

    目       录 1.      概述... 2 2.      平台演示... 2 3.      硬件设置... 2 4.      应用过程... 3 1.   概述 DTU向下连接硬件传感器 ...

  2. .net core的配置介绍(三):Options

    前两篇介绍的都是已IConfiguration为基础的配置,这里在说说.net core提供的一种全新的辅助配置机制:Options. Options,翻译成中文就是选项,可选择的意思,它依赖于.ne ...

  3. Linux 进程调度

    线程状态(context) 程序计数器(Program Counter),它表示当前线程执行指令的位置. 保存变量的寄存器. 程序的Stack.通常来说每个线程都有属于自己的Stack,Stack记录 ...

  4. antd中的form表单 initialValue导致数据不更新问题

    初步理解 : initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变,却又有一些不同,因为 initialValue又会因其他改动而改变. 然而当获取的数据重新上来要渲 ...

  5. ADO.NET数据访问基础与综合应用2020年10月31日20:17:09学习笔记

    四.创建数据表 1.数据表的名称. 2.表中的字段名.数据类型.是否可以为空.字段的约束.必备的字段(通常会有一个ID,表示实体的唯一性:可以直接手写,也可以使用种子标识自动生成,给定起始值,给定增长 ...

  6. List转换Map的三种方式

    1.for循环 ... 2.使用guava Map<Long, User> maps = Maps.uniqueIndex(userList, new Function<User, ...

  7. Centos下安装Maven私服Nexus

    dockers安装Nexus,指定访问路径(默认为/:在使用Nginx做反向代理时,最好指定访问路径),并在容器外持久化数据,避免Nexus容器升级后数据丢失. 安装并启动 docker run -d ...

  8. [MRCTF2020]Ezaudit

    [MRCTF2020]Ezaudit 知识点 1.源码泄露 2.伪随机数 3.sql注入? 题解 打开题目是个漂亮的前端,扫一下发现www.zip文件泄露,下载审计 <?php header(' ...

  9. spring 事务失效的几种场景

    以下场景是基于mysql数据库,InnoDB的存储引擎. 一.没有添加@Transactional注解 二.方法声明是private或者static 三.没有抛出异常而是try catch了异常 下面 ...

  10. Sentry 开发者贡献指南 - 什么是 Scope, 什么是 Hub?

    当一个事件被捕获并发送到 Sentry 时,SDK 会将该事件数据与来自当前 scope 的额外信息合并.SDK 通常会在框架集成中为您自动管理 scope,您无需考虑它们.但是,您应该知道 scop ...