【问题标题】:How to create dynamic arrays based on json? [closed]如何基于json创建动态数组? [关闭]
【发布时间】:2020-11-16 11:46:10
【问题描述】:

我有 sql 查询,它返回 6 列。其中一列是 clob 类型,我将 json 插入此列。看起来是这样的:

我需要使用 javascript oraz c# 制作一个表格,它将显示来自 json 的所有部分和指定的数量。它应该是这样的:

然后我必须使用 html 显示这些信息,这将显示我的动态表。

我不知道实施此类事情的最佳做法是什么,我应该从什么开始?

【问题讨论】:

  • 欢迎来到 StackOverflow。现在你的问题太宽泛了。我建议您使用在注册 StackOverflow 时建议您执行的 tour(但我可以从您的个人资料中看到您没有)并阅读 How To Ask 指南。这样您就可以更好地了解一个好的问题是什么样的,然后您可以更新您的问题以提高其质量,从而提高您获得答案的机会。这些资源的存在是为了帮助您在这里获得良好的体验,因此请使用它们。谢谢。
  • 如果您想更清楚地了解为什么我们无法真正帮助您解决这个模糊的问题,请阅读Are “how would I get started?” questions too broad?。你需要更具体地解释你卡在哪里。如果您根本没有从数据库中提取数据并将其显示在网页中的经验,那么您可能需要针对您选择的平台(例如 ASP.NET MVC 或您正在使用的任何平台)学习一些介绍性教程.

标签: javascript c# html oracle dynamic-arrays


【解决方案1】:

您不能这样做,因为您的 JSON 存在缺陷,因为该对象包含重复的 partamount 键。

{"part":"aa","amount":1,"part":"bb","amount":3,"part":"cc","amount":5}

重复的键将被忽略,只保留最新的,并将被解析为:

{"part":"cc","amount":5}

您需要更改 JSON 以包含对象数组,例如:

[{"part":"aa","amount":1},{"part":"bb","amount":3},{"part":"cc","amount":5}]

或在对象中使用唯一键:

{"parts":{"aa":1,"bb",3"cc"5}}

完成此操作后,您可以在 Oracle 中使用 JSON_TABLE 解析数据并提取值。

如:

SELECT name,
       start_date,
       end_date,
       move,
       percentage,
       COALESCE( aa, 0 ) AS aa,
       COALESCE( bb, 0 ) AS bb,
       COALESCE( cc, 0 ) AS cc,
       COALESCE( dd, 0 ) AS dd
FROM   (
  SELECT t.name,
         t.start_date,
         t.end_date,
         t.move,
         t.percentage,
         j.part,
         j.amount
  FROM   table_name t
         OUTER APPLY JSON_TABLE(
           t.modeljson,
           '$[*]'
           COLUMNS (
             part   VARCHAR2(10) PATH '$.part',
             amount INT          PATH '$.amount'
           )
         ) AS j
)
PIVOT (
  SUM( amount ) FOR part IN (
    'aa' AS aa,
    'bb' AS bb,
    'cc' AS cc,
    'dd' AS dd
  )
)

对于样本数据:

INSERT INTO table_name VALUES (
  'xxx',
  DATE '2020-10-01',
  DATE '2020-11-01',
  9,
  30,
  '[{"part":"aa","amount":1},{"part":"bb","amount":3},{"part":"cc","amount":5}]'
);

哪些输出:

姓名 | START_DATE | END_DATE |移动 |百分比 |机管局 | BB |抄送 | DD :--- | :--------- | :-------- | ---: | ---------: | -: | -: | -: | -: xxx | 01-OCT-20 | 20 年 11 月 1 日 | 9 | 30 | 1 | 3 | 5 | 0

(注意:您需要事先了解所有独特的部分,以便对它们进行旋转;如果您需要动态旋转,那么您最好在中间层执行此操作 [即 C#],因为它不能在数据库中完成。)

db小提琴here

【讨论】:

  • 我改变了你提到的 json,但问题是我不知道所有独特的部分,因为它取决于名称(第一列),这部分可能真的不同,所以我不能在 oracle 中使用 JSON_TABLE 来完成。
  • @AnnaStelmach 然后您需要将数据转移到数据库之外,您最好使用minimal reproducible example 提出一个新问题,包括用于从数据库中获取数据的 C# 代码和问题您正在执行枢轴(StackOverflow 不是人们为您编写代码的网站,您需要先投入精力,然后寻求帮助以解决错误)。
猜你喜欢
  • 2023-04-08
  • 2017-07-22
  • 1970-01-01
  • 2016-02-25
  • 2021-09-16
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多