我必须将表数据输出到嵌套的json(将地址,州,城市列作为地址的子对象),如下所示,
[
{
"name": "Country",
"size": 0,
"children": [
{
"name": "America",
"size": 0,
"children": [
{
"name": "SouthAmerica",
"size": 2,
"children": []
}
]
}
]
}
]
但默认情况下,JSON输出器只创建如下的普通json文件,
[
{
"name": "Europe",
"size": 1,
}
]
如何使用U-sql自定义输出器创建嵌套的json?建议我一些样品。
提前致谢!
答案 0 :(得分:0)
U-SQL GitHub页面上提供的示例JSON输出器不支持嵌套输出。你恐怕要编写自己的嵌套输出器。
其中一个复杂因素是,您需要能够保持完整的嵌套关联,并决定是否需要支持同级嵌套(例如,A包含相同非叶级别的B和C)或仅单个路径嵌套(例如,A包含B,而B又包含C)。
你有两个选择来编写这样的输出器,为了获得灵感,我会看一下SQL Server的FOR XML
功能:
如果您只想要单路径嵌套,请查看有关如何将行集分解为嵌套级别的FOR XML AUTO
模式语义。您可能需要将参数传递到Outputter中,以确定列如何映射到关卡,以模仿AUTO模式的谱系启发式。
如果你想要兄弟姐妹的支持,你可以看看FOR XML EXPLICIT
的模型:用户必须编写一个生成SQL查询的通用表,然后可以通过流式方式转换输出器,或
您可以使用SQL.MAP
和SQL.ARRAY
类型列生成一些层次结构,然后编写一个生成嵌套的自定义输出器。
您可以编写构成较小JSON文档的JSONifier函数,然后可以嵌套为包含JSON片段的字符串,并使用多个SELECT构建嵌套(在SQL Server中有点像FOR XML PATH
,但可能不是在行集级别轻松完成。)
或者,生成平面JSON并找到一个后处理工具,将JSON重塑为您需要的结构。
我目前正在研究第一种尝试方法#3(SQL.MAP
和SQL.ARRAY
)。