【问题标题】:How to reduce JSON object?如何减少 JSON 对象?
【发布时间】:2020-03-05 14:15:36
【问题描述】:

我有一个从数据库上的 SQL 查询创建的 JSON 文件。我正在尝试将相同“car_id”的几行减少为一行。 有一个我的 JSON 文件的示例,其中一行包含几行:

[{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"1","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"},
{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"2","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"},
{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"3","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"},
{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"4","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"},
{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"5","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"},
{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"6","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"}]

我在 StackOverflow、Google 中搜索过,要么我不明白如何将这个文件缩减为这个。

{"car_id":"1","sca_multiverseid":"430690","car_convertedmanacost":"2","car_coloridentity":"W","ccal_capacity":null,"clel_legality":"1,2,3,4,5,6","csul_supertype":null,"ctyl_type":"7","cstl_subtype":null,"set_block":"2","car_layout":"7","car_power":"0","car_toughness":"0"},

这里,只有一个不同的字段要合并 (clel_legality),但可以有多个具有不同值的字段(如 (car_coloridentity, ccal_capacity, csul_supertype ...)

如果我弄错了,对不起我的英语。提前谢谢你。

编辑: 有我的 SQL 查询:

SELECT car_id, sca_multiverseid, car_convertedmanacost, car_coloridentity, ccal_capacity, clel_legality, csul_supertype, ctyl_type, cstl_subtype, set_block, car_layout, car_power, car_toughness
FROM mag_card A LEFT JOIN mag_setcard B ON A.car_id = B.sca_card
    LEFT JOIN mag_cardcapacityli C ON A.car_id=C.ccal_card
    LEFT JOIN mag_cardlegalityli D ON A.car_id=D.clel_card
    LEFT JOIN mag_cardsupertypeli E ON A.car_id=E.csul_card
    LEFT JOIN mag_cardtypeli F ON A.car_id=F.ctyl_card
    LEFT JOIN mag_cardsubtypeli G ON A.car_id=G.cstl_card
    LEFT JOIN mag_set H ON B.sca_set=H.set_id

【问题讨论】:

  • 您使用什么编程语言?您是否真的尝试编写任何代码?如果有,请出示。使用循环来做到这一点应该不难。你到底在坚持什么?附言"clel_legality":"1,2,3,4,5,6" 真的不是一个好的结构。考虑将其设为数字​​数组而不是逗号分隔的字符串。之后更容易使用。
  • 我在 Phpmyadmin 上使用 SQL 查询生成表,并将其导出为 JSON。
  • 是的。但我的问题是你将使用什么语言来减少 JSON?到目前为止,你做了什么尝试来尝试减少,或者研究你可能会如何去做? (如果您向我们展示您使用的查询,作为上下文,也会很有帮助。)
  • 目标是在 C++ 中解析 JSON,以便能够在此数据上创建图表。所以我不得不直接从 PhpMyAdmin 导出 JSON。我有一个执行 SQL 查询并获取数据的 PHP 脚本,但我不知道如何有效地处理数据。我有大约 258000 行输入,从技术上讲,我必须有大约 18000 行输出。我不依附于任何特定的语言,我只是在寻找一种有效快速地合并行的方法。
  • 您可能想研究使用 mysql 的 Group_CONCAT 功能。 link

标签: c++ sql json phpmyadmin


【解决方案1】:

感谢 Caleb McNevin:

SELECT car_id, sca_multiverseid, car_convertedmanacost, GROUP_CONCAT(DISTINCT car_coloridentity), GROUP_CONCAT(DISTINCT ccal_capacity), GROUP_CONCAT(DISTINCT clel_legality), GROUP_CONCAT(DISTINCT csul_supertype),GROUP_CONCAT(DISTINCT ctyl_type), GROUP_CONCAT(DISTINCT cstl_subtype), set_block, car_layout, car_power, car_toughness
FROM mag_card A LEFT JOIN mag_setcard B ON A.car_id = B.sca_card
                LEFT JOIN mag_cardcapacityli C ON A.car_id=C.ccal_card
                LEFT JOIN mag_cardlegalityli D ON A.car_id=D.clel_card
                LEFT JOIN mag_cardsupertypeli E ON A.car_id=E.csul_card
                LEFT JOIN mag_cardtypeli F ON A.car_id=F.ctyl_card
                LEFT JOIN mag_cardsubtypeli G ON A.car_id=G.cstl_card
                LEFT JOIN mag_set H ON B.sca_set=H.set_id
GROUP BY car_id

命令 GROUP_CONCAT(DISTINCT xxx) 在请求结束时结合了 a 和 GROUP_BY(primary_key) 有效!

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 2016-03-04
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2011-10-29
    相关资源
    最近更新 更多