1

我已经构建了一个语句,其中结果被假脱机到一个 .json 文件中。

使用 SQLcl,它开始为:

SET ENCODING UTF-8
SET SQLFORMAT JSON
SPOOL language.json

然后,我做选择。只是一个例子:

SELECT
    INITCAP(ltl.language) language,

// ... goes on

输出:

"language":"En-Us"

这将大写language- 但是,如果我想languageLanguage.json 转储中怎么办?

我尝试过的是以下内容:

SELECT
    ltl.language INITCAP(language),

// ... goes on

但这不是一个有效的查询。

此外,在查询中将语言更改为 Language 没有任何区别 - 它已转换为小写:

SELECT
    INITCAP(ltl.language) Language,

输出:

"language":"en-US"

我想要的输出是:

输出:

"Language":"en-US"

我如何从查询中实现这一点?

4

2 回答 2

3

您无法影响使用 /*json*/ 或 SQLFORMAT json 时生成的 json 值对 KEYS 的大小写。根据我们的 Oracle 规范,这些都是小写的。

您将需要构建自己的 JSON 生成器,或使用 RegEX 或任何您觉得方便的方式编写一些 shell 脚本,然后在事后初始化密钥。

于 2018-08-16T14:02:19.983 回答
1

您可以使用 regexp_replace() 函数。

我不知道您是如何编写最终的 JSON 有效负载的,但解决方法是这样的:

select regexp_replace('"language":"en-US"', '[a-z]', upper(substr('"language":"en-US"', 2, 1)), 1, 1, 'i') 
from dual ; 


SQL> select regexp_replace('"language":"en-US"', '[a-z]', upper(substr('"language":"en-US"', 2, 1)), 1, 1, 'i') language from dual

LANGUAGE
------------------
"Language":"en-US"

SQL>

此实现假定第一个字母是您要转换的字母,但该字母位于预期的双引号字符之后。(字符串中的第二位)

问候

于 2018-08-16T14:18:34.227 回答