当前位置: 首页 > 知识库问答 >
问题:

Apache Camel:如何将层次数据从数据库转换为pojo

王杰
2023-03-14

2.Select query返回具有正确结构的JSON以转换为pojo

select json_object(
      'parentProperty1', parentProperty1
    , 'parentProperty2', parentProperty2
    , 'children', (select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(  
                          'childProperty1', childProperty1
                        , 'childProperty2', childProperty2
                        )),
                ']')
         AS JSON) 
        from childTable c
        where p.messageId=c.messageId
        )
    ))  
from parentTable p
;

在mysql shell上执行查询将返回预期的JSON:

{
    "parentProperty1": "value1",
    "parentProperty1": "value2",
    "children": [
        {
            "childProperty1": "value3",
            "childProperty2": "value4"
        },
        {
            "childProperty1": "value5",
            "childProperty2": "value6"
        }
    ]
}

在camel中运行查询时,我遇到了一个问题,对此我无法找到解释或解决方案。

[{json_object('parentProperty1', parentProperty1 , 'parentProperty2', parentProperty2 , 'children', (select CAST(CONCAT('[',
={"parentProperty1": "value1", "parentProperty2": "value2", "children": [{"childProperty1": "value3", "childProperty2": "value4"}, {"childProperty1": "value5", "childProperty2": "value6"}]}}]
    null

提前致谢

共有1个答案

张高义
2023-03-14

您实际上得到的是一个键值对。由于查询中没有为json_obect提供别名,所以mysql生成默认列名。这就是您在结果中看到的查询片段。

向查询中的json_obect添加别名,如下所示:

    select json_object(
      'parentProperty1', parentProperty1
    , 'parentProperty2', parentProperty2
    , 'children', (select CAST(CONCAT('[',
                GROUP_CONCAT(
                  JSON_OBJECT(  
                          'childProperty1', childProperty1
                        , 'childProperty2', childProperty2
                        )),
                ']')
         AS JSON) 
        from childTable c
        where p.messageId=c.messageId
        )
    ) as result  
from parentTable p;

这将返回如下内容:

{result={"children": [{"childProperty1": "value3", "childProperty2": "value4"}, {"childProperty1": "value5", "childProperty2": "value6"}], "parentProperty1": "value1", "parentProperty2": "value2"}}
 类似资料:
  • 我在中心时区的服务器上安装了一个postgres db,所以所有的时间戳列都在中心时区。 在postgres中有没有办法将数据库中的所有时区列从CST更改为GMT?将数据库配置为使用GMT是最佳做法吗?

  • 问题内容: 有什么简单的方法可以将数据库从mysql更改为mongoDB? 或更好的一个建议我好的教程做到这一点 问题答案: 有什么简单的方法可以将数据库从mysql更改为mongoDB? 方法#1 :以CSV格式从MySQL导出,然后使用mongoimport工具。但是,这在处理二进制数据的日期方面并不总是很好。 方法2 :使用您选择的语言编写传输脚本。基本上,您编写了一个程序,一次从MySQL

  • 问题内容: 假设我有一个结构: 与数据库表具有相同的架构。将数据库行解析为结构的最简单方法是什么?我在下面添加了一个答案,但是我不确定这是最好的答案。 问题答案: 这是一种实现方法-只需在函数中手动分配所有结构值即可。

  • 问题内容: 我希望从该网站的mma 数据中抓取数据并解析一些highcharts表。我单击的链接与selenium,然后切换到图表。我转到该站点,然后在Artem Lobov行的Pinnacle列中单击+420。这将创建一个弹出图表。然后,我切换到活动元素。我想捕获由highcharts绘制的图形以响应点击。 我以以下方式使用selenium: 我能够单击链接并获得图表,但我对highcharts

  • 问题内容: 我刚刚为组织此表中第70页上显示的查询层次结构数据的“关闭表”方法做了“更新/添加/删除”部分:http ://www.slideshare.net/billkarwin/sql-antipatterns- strike -背部 我的数据库如下所示: 表类别: 表类别树: 但是,从单个查询获取整棵树作为多维数组时,我遇到了一个问题。 这是我想回来的东西: 更新: 找到了此链接,但是我仍

  • 我正在尝试从位于的文件导入数据https://drive.google.com/file/d/1leOUk4Z5xp9tTiFLpxgk_7KBv3xwn5eW/view进入数据帧。我试过使用 但是我得到一个错误说"ParserError:错误标记化数据。C错误:期望在行231中有9个字段,看到10"我不想使用'error_bad_lines=False'并跳过数据行。 请帮忙。