如何从指定JSON数据中提取UserID并插入对应数据表
实现方案
核心逻辑
- 第一步:解析原始JSON字符串为对应语言/环境的结构化对象
- 第二步:遍历
users数组,提取所有元素的UserID字段值,组成独立的ID列表
本次示例中提取到的UserID列表为:['5','7','22','23','24','25','33','45','46','47'],可根据目标表字段类型选择保留字符串格式或转换为整型 - 第三步:将提取到的ID列表写入目标数据表,推荐使用批量插入提升性能
不同场景实现示例
场景1:Python 操作(适用于后端脚本/ETL场景)
import json import pymysql # 1. 加载解析JSON raw_json = ''' { "PK_ID" : 0, "Group_Id" : 39, "Group_Name" : null, "Admin_User_Id" : 0, "DisplayName" : null, "Sms" : true, "Email" : false, "WhatsApp" : false, "UpdatedBy" : 28, "CreatedBy" : 28, "users" : [ { "UserID" : "5" }, { "UserID" : "7" }, { "UserID" : "22" }, { "UserID" : "23" }, { "UserID" : "24" }, { "UserID" : "25" }, { "UserID" : "33" }, { "UserID" : "45" }, { "UserID" : "46" }, { "UserID" : "47" } ], "MailOfficial" : null, "CC" : null, "BCC" : null, "EmailSubject" : null, "EmailContent" : null, "MessageText" : null, "WhatsAppText" : null, "SpName" : null, "MobileNo" : null, "TypeOfReport" : null } ''' data = json.loads(raw_json) # 2. 提取UserID列表,按需可删除int()转换保留字符串格式 user_ids = [int(item["UserID"]) for item in data["users"]] # 3. 批量插入数据库示例 conn = pymysql.connect(host="你的数据库地址", user="用户名", password="密码", database="库名") cursor = conn.cursor() # 假设目标表名为target_table,存储ID的字段名为user_id insert_sql = "INSERT INTO target_table (user_id) VALUES (%s)" cursor.executemany(insert_sql, user_ids) conn.commit() # 关闭连接 cursor.close() conn.close()
场景2:MySQL 直接操作(JSON存储在MySQL字段中时)
如果原始JSON已经存储在MySQL的JSON类型字段里,比如源表source_table的json_col字段,可直接用SQL完成提取插入:
-- 提取UserID并插入目标表 INSERT INTO target_table (user_id) SELECT JSON_UNQUOTE(JSON_EXTRACT(u, '$.UserID')) AS user_id FROM source_table, JSON_TABLE( source_table.json_col->'$.users', '$[*]' COLUMNS (u JSON PATH '$') ) AS user_items;
注:JSON_TABLE函数需要MySQL 8.0及以上版本支持,低版本可通过编写存储过程遍历JSON数组实现
场景3:Node.js 操作(适用于后端服务场景)
const mysql = require('mysql2/promise'); // 原始JSON数据 const rawData = { "PK_ID" : 0, "Group_Id" : 39, // 其余字段省略 "users" : [{"UserID":"5"},{"UserID":"7"},{"UserID":"22"},{"UserID":"23"},{"UserID":"24"},{"UserID":"25"},{"UserID":"33"},{"UserID":"45"},{"UserID":"46"},{"UserID":"47"}] } // 提取UserID const userIds = rawData.users.map(item => parseInt(item.UserID)) // 批量插入 async function insertIds() { const conn = await mysql.createConnection({ host: '你的数据库地址', user: '用户名', password: '密码', database: '库名' }); const [rows] = await conn.query( 'INSERT INTO target_table (user_id) VALUES ?', [userIds.map(id => [id])] ); await conn.end(); } insertIds();
内容的提问来源于stack exchange,提问作者vikas
相关产品推荐
相关产品推荐

