row_to_json为JSON提供小写字段名称

时间:2018-04-24 06:37:42

标签: json postgresql postgresql-json

我创建了一个自定义类型,如下所示:

create type my_type as (camelCasedIdentifier uuid, ...);

我正在使用此自定义类型my_type来定义JSON正文中的字段名称:

select row_to_json(row(my_table.id, ...)::my_type) from my_table;

我认为使用自定义类型有用的原因是这样,我不必在每个查询中定义JSON字段名称(它们与我的情况下的表列名称不同),就像你一样与json_build_object()有关。

然而,这里的问题是字段名称现在都是小写的:

{"camelcasedidentifier":"d8f0a177-af13-4fa2-a2af-3bc8296d848e", ...}

我期待:

{"camelCasedIdentifier":"d8f0a177-af13-4fa2-a2af-3bc8296d848e", ...}

我该如何解决这个问题?我知道这可以通过使用select json_build_object('camelCasedIdentifier', my_table.id) from my_table来修复,但我宁愿不这样做,因为我将被迫在每个查询中枚举JSON字段名称。

1 个答案:

答案 0 :(得分:1)

在SQL identifiers中不区分大小写,因此您的类型实际上是使用名为camelcasedidentifier的字段创建的。

如果您确实需要,则必须使用带引号的标识符:

create type my_type as ("camelCasedIdentifier" uuid, ...);

如果你只使用那种类型来进行JSON转换,这是可以接受的,但是到处使用那些可怕的带引号的标识符会给你带来更多的问题,从长远来看它们是值得的。