想要来自休眠 json 响应的嵌套 json 格式

Posted

技术标签:

【中文标题】想要来自休眠 json 响应的嵌套 json 格式【英文标题】:want nested json format from hibernate json response 【发布时间】:2017-07-30 00:55:15 【问题描述】:

我有如下的 json 响应

["Name":"kannur hub","Amount":1840.00,"Name":"Calicut Hub","Amount":7000.00]

我想要一个这样的json而不是上面的格式

["name":"kannur hub","TotalAmount":1840,"child":["sub":"Sale Of Products @ 12 % Tax","amount":345,"sub":"sos","amount":1020,"sub":"Boss","amount":475],"name":"Calicut Hub","TotalAmount":7000,"child":[sub":"cop","amount":3500,"sub":"SALES ACCOUNT","amount":3500]]

因此,每当我从休眠投影中检索子分组时,结果都会删除总和值并返回单个值

["sub":"Boss","Name":"kannur hub","Amount":475.00,"sub":"sos","Name":"kannur hub","Amount":1020.00,"sub":"cop","Name":"Calicut Hub","Amount":3500.00,"sub":"SALES ACCOUNT","Name":"Calicut Hub","Amount":3500.00,"sub":"Sale Of Products @ 12 % Tax","Name":"kannur hub","Amount":345.00]

休眠查询是,

ProjectionList proj = Projections.projectionList();
        proj.add(Projections.groupProperty("offId.officeProfileName").as("Name"));
        proj.add(Projections.groupProperty("accId.accHeadName").as("sub"));
        proj.add(Projections.sum("accountsDataValue").as("Amount"));
        crit.setProjection(proj);

我正在使用 java 1.8 版本的 spring boot 应用程序和 postgresql 数据库

【问题讨论】:

【参考方案1】:

如果你想获得你想要的json结果,你应该创建一个自定义的DTO,请看下面的例子。

class Child 
    String sub;
    Long amount;


class Dto 
   String name;
   Long totalAmount;
   List<Child> child;

然后编写您的 Dto 并添加必要的子级。下面是示例,假设您已经从 db 中获得了结果:

如果你的 rs 返回是 List&lt;Child&gt; 那么你可以这样做..

Dto dto = new Dto();
dto.addAll(rs);
dto.setName("name");
dto.setTotalAmount(totalAmount);
return dto;

或者如果 rs 结果不是 List&lt;Child&gt; 你可以这样做...

Dto dto = new Dto();
//assumed rs contains the db child results.
for(int i=0; i<rs.length; i++) 
    Child child = new Child(rs.get("sub"), rs.get("amount"))
    dto.getChild().add(child)

dto.setName("name");
dto.setTotalAmount(totalAmount);
return dto;

生成的有效 JSON 如下所示:


        "name":"kannur hub",
        "TotalAmount":1840,
        "child":[
            
                "sub":"Sale Of Products @ 12 % Tax",
                "amount":345,
            ,
            
                "sub":"sos",
                "amount":1020,
            ,
            
                "sub":"Boss",
                "amount":475
            
        ]
    ,
    
        "name":"Calicut Hub",
        "TotalAmount":7000,
        "child":[
            
                "sub":"cop",
                "amount":3500
            ,
            
                "sub":"SALES ACCOUNT",
                "amount":3500
            
        ]
    

【讨论】:

您能否更具体一些,尤其是在创建 DTO 类之后

以上是关于想要来自休眠 json 响应的嵌套 json 格式的主要内容,如果未能解决你的问题,请参考以下文章

转换来自 web 服务的 Json 格式响应

如何将 NodeJs 响应转换为嵌套的 json 响应

来自 SQL 视图的嵌套 JSON 响应

如何为来自 SpringBoot 后端代码的嵌套 JSON 响应在 angular8(TypeScript) 或更高版本中定义模型类

对熊猫数据框的深度嵌套 JSON 响应

来自控制器的格式错误的 Json 响应