MySQL形成JSON_OBJECT,在NULL上指定缺席 - 是否可能?

Nev*_*eue 6 mysql null json

我正在转换我的一些MySQL.我正在使用JSON_OBJECTJSON_OBJECTAGG形成JSON文档.问题是我有很多NULL字段,在这种情况下我不希望MySQL向JSON结构添加NULL字段.我希望这个领域不存在.

是否可以使用任何版本的MySQL?

扫描互联网,我发现Oracle DB中有类似内容:https: //docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/JSON_OBJECT.html#GUID-1EF347AE-7FDA -4B41-AFE0-DD5A49E8B370

ABSENT ON NULL条款.

小智 6

我刚收到同样的问题。这是我解决它的方法:

select ...,  
JSON_REMOVE(JSON_OBJECTAGG(IFNULL(column_holding_property_name, 'null__'), column_holding_property_value), '$.null__') as result_column_name  
from ... group by ...;  
Run Code Online (Sandbox Code Playgroud)

它将空键替换为'null__',然后将它们从最终对象中删除。所以不需要后期处理。
JSON_REMOVE转换{"null__":1,"b":2}{"b":2}{"null__":1}{},所以最终的结果总是一个对象。
顺便说一句,我使用'null__'是因为我知道它column_holding_property_value永远不会包含那个值。


jsa*_*rma 3

解决方案一:

mysql中有一个处理这个问题的方法:

JSON_OBJECTAGG(IFNULL(key, ''), value)
Run Code Online (Sandbox Code Playgroud)

null 字段将被重新映射到 '',从而防止 SQL 错误。然后,当您解析结果时,您可以过滤掉空的“”。

这个解决方案有点依赖于能够让调用者进行查询后过滤。

解决方案2:

消除这些空值的另一种方法是添加一个 where 子句,无论它们是在对象的键中还是在值中。例如:

SELECT JSON_OBJECTAGG(color, red) 
FROM ( SELECT 'color', 'red' UNION select 'color2', 'blue' UNION select 'color3', null ) AS x
WHERE red IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的空值来自左连接,并且您仍然需要空字段用于其他目的,那么这可能对您没有帮助。

如果这两种解决方案都不起作用,那么抱歉,我没有办法给你了!