Oracle JSON函数不向小数添加前导零

Oracle JSON函数不向小数添加前导零,json,sql-server,oracle,Json,Sql Server,Oracle,在Oracle 12c中使用: SELECT COLUMN_VALUE "value" , json_array(COLUMN_VALUE) "json_output" FROM TABLE(SYS.ODCINUMBERLIST(5.00, -5.00, 0.50, -0.50, 0.05, -0.05)) value json_output 5 [5] -5 [-5] 0.5 [0.5] <--Zero before decimal -0.5

在Oracle 12c中使用:

SELECT
  COLUMN_VALUE "value"
, json_array(COLUMN_VALUE) "json_output"
FROM TABLE(SYS.ODCINUMBERLIST(5.00, -5.00, 0.50, -0.50, 0.05, -0.05))

value   json_output
5       [5]
-5      [-5]
0.5     [0.5]    <--Zero before decimal
-0.5    [-0.5]
.05     [.05]    <--No zero before decimal
-.05    [-.05]
如何强制Oracle生成符合RFC4627的JSON?或者,如何让SQL Server解析不符合的格式


编辑:这是一个大数据流(对于我的资源来说),大约1TB/小时。我希望有一个比中途编辑JSON字符串更干净的解决方案。

您是否非常喜欢这些数字?否则,您可以只输出格式化字符串并将其解析回来。显然,这并不理想,但考虑到JSON是文本……值得注意的是,隐含的
JSON_对象
做了正确的事情(在“示例”下),因此您可以想当然地使用它来解决问题(如果它是准确的话)。一种“修复”问题的俗套方法是替换
[。
[-.
,.
,-.
以及它们的正确等价物。问题是,它可能会破坏合法包含这些序列的字符串,但这应该是相对少见的。特别是如果您可以将其设置为
[0
等,因为它似乎只有在第一个小数点为0时才会失败。最后(对注释序列表示歉意)如果您没有与JSON结为夫妻,但将其作为Oracle和SQL Server之间传输数据的一种方式,则两者都支持生成和处理XML,并且对XML的支持比JSON更为成熟。当然,在Oracle中通过字符串连接生成JSON(绕过内置函数)如果不美观,也可以用于简单用例。@jeroemoster
JSON_对象
具有相同的不兼容行为。
从DUAL
->
{x:-.05}
中选择JSON_对象(“x”值-0.05)“JSON_输出”。文档示例为0.5,而不是0.05。Oracle的行为在两者之间不一致。
SELECT * FROM OPENJSON('[.05]')

Msg 13609, Level 16, State 4, Line 137
JSON text is not properly formatted. Unexpected character '.' is found at position 1.