You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#结合SQL Server实现翻译表按Key分组输出指定结构JSON的方法

翻译数据行转嵌套JSON的极简实现方案

下面提供两类无需复杂嵌套循环的实现思路,按需选择即可:

方案1:数据库层面直接生成(最省心,无需后端额外处理)

直接修改SQL查询语句,利用数据库自带的JSON聚合能力直接返回目标结构的JSON,不需要后端代码做二次转换:

PostgreSQL 实现

SELECT json_object_agg("Key", lang_map) AS result
FROM (
    SELECT "Key", json_object_agg("CultureId", "Txt") AS lang_map
    FROM "Xlations"
    GROUP BY "Key"
) t;

MySQL 实现(MySQL 5.7及以上版本支持)

SELECT JSON_OBJECTAGG(`Key`, lang_map) AS result
FROM (
    SELECT `Key`, JSON_OBJECTAGG(`CultureId`, `Txt`) AS lang_map
    FROM `Xlations`
    GROUP BY `Key`
) t;

执行上述查询后,直接取出result字段的值返回给前端即可,完全不需要额外处理。

方案2:后端代码层面极简实现

如果不想修改SQL,用后端语言自带的高阶函数或工具类就能几行搞定,不需要嵌套循环:

JavaScript/Node.js 实现

假设SQL查询返回的行数据存在rows数组中,一行代码即可完成转换:

const result = rows.reduce((acc, { Key, CultureId, Txt }) => {
  acc[Key] = acc[Key] || {}
  acc[Key][CultureId] = Txt
  return acc
}, {})

简写版本:

const result = rows.reduce((acc, cur) => ((acc[cur.Key]??={})[cur.CultureId] = cur.Txt, acc), {})

Python 实现

from collections import defaultdict

# rows为SQL查询返回的字典格式行列表
result = defaultdict(dict)
for row in rows:
    result[row['Key']][row['CultureId']] = row['Txt']

# 如需转成普通字典直接使用dict(result)即可

注意事项

  • 你给出的目标JSON示例中$WELCOME的两种语言翻译和原始表数据不一致,属于笔误,实际处理时以数据库查询返回的Txt字段值为准即可
  • 如果存在重复Key+CultureId的记录,后处理的记录会自动覆盖之前的记录,可根据业务需求提前加去重或排序逻辑

内容的提问来源于stack exchange,提问作者Marco Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:36:03