我已经建立了一条语句,将结果假脱机到.json文件中。
使用SQLcl,它的开头为:
SET ENCODING UTF-8
SET SQLFORMAT JSON
SPOOL language.json
然后,我选择。只是一个例子:
SELECT
INITCAP(ltl.language) language,
// ... goes on
输出:
"language":"En-Us"
这将大写language
的值-但是,如果我想在.json转储中将language
设为Language
怎么办?
我尝试过的是:
SELECT
ltl.language INITCAP(language),
// ... goes on
但这不是有效的查询。
此外,在查询中将语言更改为“语言”没有区别-它已转换为小写字母:
SELECT
INITCAP(ltl.language) Language,
输出:
"language":"en-US"
我想要的输出是:
输出:
"Language":"en-US"
如何从查询中实现?
答案 0 :(得分:3)
您不能影响使用/ * json * /或SQLFORMAT json时生成的json值对KEYS的情况。根据我们的Oracle规范,这些在设计上是小写的。
您将需要构建自己的JSON生成器,或使用RegEX或您发现的方便使用的脚本编写一些shell脚本,并在事后初始化键。
答案 1 :(得分: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>
此实现假定第一个字母是您要转换的字母,但是此字母在预期的双引号字符之后。 (字符串中的第二位)
致谢