java-生成任意格式的json数据

最近研究java的东西。之前靠着自己的摸索,实现了把java对象转成json格式的数据的功能,返回给前端。当时使用的是 JSONObject.fromObject(object) 方法把java对象换成json格式。也就是先有一个java实体类,例如叫User。然后从数据库查出列表数据,也就是一个List,里面的每一条数据都是一个User的实体对象。而如果前端需求变化,需要在当前这个接口中多返回一个字段时,就需要修改这个User实体类,新增字段。这样一来,所有用到这个User实体类的接口的地方,接口返回的json数据里都会有新增的这个字段。后来发现可以用一下方法根据需要动态拼接需要的字段。

1、demo

package com.lin.domain;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Test {
  
    public static void main(String[] args) throws Exception {  
        JSONObject createJSONObject = createJSONObject();
        System.out.println(createJSONObject);
    }  
      
 // 创建JSONObject对象  
    private static JSONObject createJSONObject() {  
        JSONObject result = new JSONObject();  
        result.put("success", true);  
        result.put("totalCount", "30");  
        
        JSONObject user1 = new JSONObject();  
        user1.put("id", "12");  
        user1.put("name", "张三");  
        user1.put("createTime", "2017-11-16 12:12:12");  
   
        JSONObject user2 = new JSONObject();  
        user2.put("id", "13");  
        user2.put("name", "李四");  
        user2.put("createTime", "2017-11-16 12:12:15"); 
        
        JSONObject department = new JSONObject();
        department.put("id", 1);
        department.put("name","技术部");
        
        user1.put("department", department);
        user2.put("department", department);
          
        // 返回一个JSONArray对象  
        JSONArray jsonArray = new JSONArray();  
          
        jsonArray.add(0, user1);  
        jsonArray.add(1, user2);  
        result.element("data", jsonArray);  
          
        return result;  
    } 
}

返回的json数据:

2、接口demo

以下是真实的java接口,从数据库查询数据

@ResponseBody
    @RequestMapping(value="/getRoleMenuList.do", method=RequestMethod.GET)
    public void getRoleMenuList(HttpServletRequest req, HttpServletResponse res, Integer roleId) throws IOException{
        res.setHeader("Content-type", "application/json;charset=UTF-8");
        res.setCharacterEncoding("UTF-8");
        ResListData rld = new ResListData();
        
        JSONObject result = new JSONObject();
        
        try {
            Map<String, Object> params1 = new HashMap<>();
            params1.put("roleId", roleId);
            params1.put("menuLevel", 1);
            List<RoleJuri> fMenuList = rjService.getRoleMenuList2(params1);    //一级菜单
            JSONArray firstList = new JSONArray(); 
            
            for(int i=0; i<fMenuList.size(); i++){
                RoleJuri firstMenu = fMenuList.get(i);
                JSONObject firstResult = new JSONObject();
                firstResult.put("id", firstMenu.getId());
                firstResult.put("name", firstMenu.getMenuName());
                firstResult.put("url", firstMenu.getMenuUrl());
                Map<String, Object> params2 = new HashMap<>();
                params2.put("roleId", roleId);
                params2.put("menuPId", firstMenu.getMenuId());
                List<RoleJuri> sMenuList = rjService.getRoleMenuList2(params2);    //二级菜单
                
                JSONArray secondList = new JSONArray();
                for(int j=0; j<sMenuList.size(); j++){
                    RoleJuri secondMenu = sMenuList.get(j);
                    JSONObject secondResult = new JSONObject();
                    secondResult.put("id", secondMenu.getId());
                    secondResult.put("name", secondMenu.getMenuName());
                    secondResult.put("url", secondMenu.getMenuUrl());
                    secondList.add(secondResult);
                }
                firstResult.put("children", secondList);
                firstList.add(firstResult);
            }
            if(fMenuList.size() > 0){    //查询到了一级菜单
                result.put("success", 1);
                result.put("data", firstList);
            }else{    //未查询到一级菜单
                result.put("success", 0);
                result.put("data", new Array());
                result.put("error", "未获取到菜单数据");
            }
        } catch (Exception e) {
            result.put("success", 0);
            result.put("data", new Array());
            result.put("error", "服务器运行错误");
        }
        res.getWriter().write(result.toString());
    }

返回的json数据

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jessetalks

由浅入深表达式树(完结篇)重磅打造 Linq To 博客园

  一个多月之后,由浅入深表达式系列的最后一篇终于要问世了。想对所有关注的朋友说声:“对不起,我来晚了!” 希望最后一篇的内容对得起这一个月时间的等待。在学习完...

4496
来自专栏Create Sun

mvc+webapi 单元测试 3.使用Moq模拟AspnetMvc中的Request.Form

 1.前言     现在这个项目已经有阶段性的模块完成了,所以就想着对这些模块进行单元测试,以保证项目的代码的质量。首先虽然标题是mvc+webapi实质上我只...

6299
来自专栏GreenLeaves

C#核编之System.Environment类

      在前面的例子中用来了Environment.GetCommandLineArgs()这个方法,这个方法就是获取用户的命令行输入,是Environme...

2487
来自专栏大内老A

开发自己的Data Access Application Block[上篇]

经常在网上看到对ORM的讨论沸沸扬扬,我也来凑个热闹,谈谈我写的一个ORM。最近在做一项工作,把我们经常用到的一些业务逻辑抽象出来,写成一个个的Applicat...

1928
来自专栏大内老A

我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解。其中很大一部分人甚至认为面向服务将是面向对象的终结...

1925
来自专栏圣杰的专栏

Parallel线程安全问题

废话不多说,上代码: using System; using System.Collections.Generic; using System.Threadin...

3295
来自专栏Create Sun

quartz.net插件类库封装(含源码)

1、前言    最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 ...

30111
来自专栏c#开发者

Winform 的一个多线程绑定DataGrid数据源的例子

我们都知道简单的运用多线程的方法有 1/ Thread thread=new Thread(new StartThread(this.method))     ...

3089
来自专栏Kiba518

C#线程安全使用(四)

这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来。

873
来自专栏强仔仔

SpringBoot JPA实现增删改查、分页、排序、事务操作等功能

今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查、分页、排序、事务操作等功能。 下面先来介绍一下JPA中一些常用的查询操作: ...

2916

扫码关注云+社区

领取腾讯云代金券