【问题标题】:How to create an Array of Objects from a string returned from SQL Query (return single value)如何从 SQL 查询返回的字符串创建对象数组(返回单个值)
【发布时间】:2020-04-24 23:04:18
【问题描述】:

我正在尝试通过 SQL 查询(类型:返回单个值)为 ApexChart(条形图)创建一些输入数据。条形图将接受以下形式的数据输入:

[ {x:"1 author", y:15 }, {x:"3 authors", y:55}, {x:"15 authors", y:25} ]

SQL 返回类似如下结果:

"[{x:"1", y:14},{x:"1", y:15},{x:"1", y:19}]"

如果我直接从 SQL Developer 控制台复制 SQL 结果并将其粘贴到我的脚本中,它可以正常工作,但这不是执行此任务的最干净的方法。理想情况下,此查询返回的数据最好直接从 Apex 中的文件项中读取,并自动解析为所需的输入数据格式(即对象数组)。比方说,隐藏的项目名称是“P3_ITEM”。

P3_ITEM.value

会给我们单值字符串连接的 SQL 查询结果。

"[{x:"1", y:14},{x:"1", y:15},{x:"1", y:19}]"

删除开始和结束双引号不会解决,因为它仍然是字符串类型。并且将此字符串转换为对象数组也不起作用,因为它是字符串数组而不是对象。

那么,问题来了,如何创建从这个字符串值派生的对象数组(单值sql结果)?

【问题讨论】:

  • 您使用的是什么版本的数据库?您已经可以访问 APEX_JSON,但如果您使用的是 12.2+,您可能也可以访问本机 JSON 生成函数。

标签: javascript arrays oracle-apex


【解决方案1】:

JSON.parse 会将字符串化的 json 对象转换为 javascript 对象。

正如 cmets 中所讨论的,您的输出不是有效的 JSON,因此不能这样解释。

解决此问题的正确方法:

推荐的方法是以有效的 JSON 格式(这也允许使用 SQL JSON 函数)在键周围使用双引号来存储您的数据。

[{"x":1, "y":14},{"x":1, "y":15},{"x":1, "y":19}]

解决此问题的错误方法:

您可以使用评估直接将您的输出评估为使用 eval 的 javascript 代码:

eval('[{x:"1", y:14},{x:"1", y:15},{x:"1", y:19}]');

this 就是它不好的原因。但您的系统也不会是标准的。

【讨论】:

  • JSON.parse(P3_ITEM.value) 给我错误:“SyntaxError: JSON.parse: expected property name or '}' at line”
  • 您的密钥似乎没有被引用。推荐的方法是使用正确的 JSON 格式将您的数据存储为实际的 JSON。我将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 2018-08-12
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多