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

如何将SQL Server输出的JSON转为Prisma可用的TypeScript格式?

解决SQL Server导出数据适配Prisma Client TypeScript格式的问题

核心需求拆解

需要将SQL Server表数据转换为键无引号、字符串值用单引号的TypeScript对象格式,替代FOR JSON AUTO生成的标准JSON格式,用于Prisma的seed脚本。直接全局替换引号会破坏数据结构,需精准处理不同类型内容。


方法1:Node.js脚本精准正则替换

通过两步正则替换,分别处理对象键和字符串值,同时保留数字、null等非字符串类型的原始格式,还能处理字符串中的单引号转义。

示例脚本

const fs = require('fs');

// 读取SQL导出的JSON文件
const rawJson = fs.readFileSync('./sql-output.json', 'utf8');

// 步骤1:移除对象键的双引号(匹配"键名": 格式)
let tsFormat = rawJson.replace(/"(\w+)"\s*:/g, '$1:');

// 步骤2:将字符串值的双引号替换为单引号,同时处理转义
tsFormat = tsFormat.replace(/:\s*"([^"]*)"/g, (match, value) => {
  // 跳过null、数字等非字符串值
  if (value === 'null' || !isNaN(Number(value))) {
    return match;
  }
  // 处理字符串中的单引号转义,以及JSON中的转义双引号
  const escapedValue = value.replace(/'/g, "\\'").replace(/\\"/g, '"');
  return `: '${escapedValue}'`;
});

// 写入可直接导入seed.ts的数据文件
fs.writeFileSync('./prisma-seed-data.ts', `export const userData = ${tsFormat};`);

使用说明

  1. 用SELECT ... FOR JSON AUTO,INCLUDE_NULL_VALUES导出JSON到sql-output.json
  2. 运行上述脚本生成prisma-seed-data.ts
  3. 在seed.ts中导入使用:
import { PrismaClient } from '@prisma/client';
import { userData } from './prisma-seed-data';

const prisma = new PrismaClient();

async function main() {
  await prisma.user.createMany({ data: userData });
}

main()
  .catch(e => console.error(e))
  .finally(async () => await prisma.$disconnect());

方法2:SQL直接生成TS格式字符串

跳过JSON转换步骤,用SQL的字符串拼接函数直接生成符合要求的TypeScript代码,避免后续处理。

示例SQL(以Users表为例)

SELECT '[' + STRING_AGG(
  CONCAT(
    '{ Id: ', Id, ', ',
    'Name: ''', REPLACE(Name, '''', '\'''), ''', ',
    'Description: ', IIF(Description IS NULL, 'null', '''' + REPLACE(Description, '''', '\''') + ''''), ', ',
    'Age: ', Age, ' }'
  ), ', ' + CHAR(10) -- 添加换行,让输出更易读
) + ']' AS PrismaSeedData
FROM Users;

关键处理点

  • 用REPLACE(col, '''', '\''')处理字符串中的单引号,转义为TS支持的\'
  • 用IIF判断null值,直接输出null而非字符串
  • STRING_AGG拼接所有行对象为数组格式,CHAR(10)添加换行优化可读性

执行后直接复制查询结果到seed.ts的data数组中即可。


方法3:命令行工具组合转换(jq+sed)

如果习惯用命令行处理,可以用jq解析JSON,再用sed调整格式:

# 从sql-output.json生成TS格式数组
jq -r '.[] | "{ Id: \( .Id ), Name: '\''\( .Name | gsub("\''"; "\\\''") )'\'', Description: \( .Description // "null" ), Age: \( .Age ) }"' sql-output.json | 
sed 's/^/  /' | 
awk 'BEGIN{print "["} {print $0 ","} END{print "]"}' > seed-data.txt

执行后将seed-data.txt的内容复制到seed.ts即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:43:25