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

请求协助:将指定SQL查询结果转换为特定嵌套结构的JSON输出

把SQL查询结果转换成指定JSON结构的方案

嘿,我来帮你搞定这个需求!首先先提个小细节:你给出的SQL语句里有个语法错误——p.regionCity,,issuer_type这里多了一个逗号,得去掉才能正常执行哦。

接下来,根据不同的场景,我给你两种常见的实现方式:

1. 直接在SQL层生成目标JSON

如果你的数据库支持JSON函数(比如MySQL 5.7+、PostgreSQL 9.4+),可以直接用内置函数生成你要的结构,不用在应用层额外处理。

MySQL 版本

SELECT 
  JSON_OBJECT(
    'issuer', JSON_OBJECT(
      'address', JSON_ARRAYAGG(
        JSON_OBJECT(
          'branchID', p.branchID,
          'country', country,
          'governate', p.governate,
          'regionCity', p.regionCity
        )
      ),
      'id', issuer_id,
      'name', issuer_name,
      'type', issuer_type
    )
) AS formatted_result
FROM issuer
GROUP BY issuer_id, issuer_name, issuer_type;

说明:

  • JSON_ARRAYAGG会把同一个发行方(issuer)下的所有分支机构地址聚合成一个数组,对应address字段
  • GROUP BY是为了确保每个发行方只生成一个JSON对象,避免重复
  • 最终结果会输出一个名为formatted_result的字段,内容就是你要的JSON结构

PostgreSQL 版本

PostgreSQL的JSON函数命名略有不同,写法如下:

SELECT 
  json_build_object(
    'issuer', json_build_object(
      'address', json_agg(
        json_build_object(
          'branchID', p.branchID,
          'country', country,
          'governate', p.governate,
          'regionCity', p.regionCity
        )
      ),
      'id', issuer_id,
      'name', issuer_name,
      'type', issuer_type
    )
) AS formatted_result
FROM issuer
GROUP BY issuer_id, issuer_name, issuer_type;

2. 在应用层处理(以Python为例)

如果你的数据库不支持JSON函数,或者你更倾向于在应用层控制转换逻辑,可以用代码来处理查询结果。这里以Python+pandas为例:

import pandas as pd
import json
import psycopg2  # 或者用pymysql,根据你的数据库选择

# 1. 连接数据库并执行查询(这里以PostgreSQL为例)
conn = psycopg2.connect(
    dbname="你的数据库名",
    user="用户名",
    password="密码",
    host="主机地址"
)

# 注意修正SQL里的逗号错误
query = """
select p.branchID,country,p.governate,p.regionCity,issuer_type,issuer_id,issuer_name 
from issuer
"""
df = pd.read_sql(query, conn)
conn.close()

# 2. 按发行方分组,构造地址数组
grouped_data = df.groupby(['issuer_id', 'issuer_name', 'issuer_type']).apply(
    lambda group: group[['branchID', 'country', 'governate', 'regionCity']].to_dict('records')
).reset_index(name='address')

# 3. 生成目标JSON结构
final_json = grouped_data.apply(
    lambda row: {
        "issuer": {
            "address": row['address'],
            "id": str(row['issuer_id']),  # 如果需要字符串类型,转一下
            "name": row['issuer_name'],
            "type": row['issuer_type']
        }
    }, axis=1
).tolist()

# 4. 输出格式化后的JSON
print(json.dumps(final_json, indent=2, ensure_ascii=False))

说明:

  • 代码先把查询结果读入DataFrame,然后按发行方的唯一标识分组
  • 把每个分组里的地址字段转成字典列表,对应address数组
  • 最后嵌套成你要的JSON结构,输出时可以用indent参数让格式更美观

内容的提问来源于stack exchange,提问作者Omar Mohsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:09:09