React Native中如何将JSON对象插入SQLite数据库?
在react-native-sqlite-storage中存储JSON对象实现方法
SQLite本身没有专用的JSON字段类型,存储JSON的核心逻辑是写入前序列化为字符串,读取后反序列化为对象,具体实现步骤如下:
1. 建表时指定存储字段为TEXT类型
JSON序列化后是字符串格式,建表时将对应字段设为TEXT即可:
CREATE TABLE IF NOT EXISTS app_data ( id INTEGER PRIMARY KEY AUTOINCREMENT, biz_type INTEGER NOT NULL, json_content TEXT NOT NULL, -- 用于存储JSON的字段 update_time INTEGER NOT NULL );
2. 写入数据前序列化JSON对象
使用JS原生JSON.stringify()将对象转为字符串,必须通过参数化查询传入SQL,禁止直接拼接SQL字符串,避免特殊字符导致语法错误或SQL注入:
// 待存储的JSON对象 const formData = { username: "test_user", selections: [1, 3, 5], config: { autoSync: true, fontSize: 14 } }; try { const jsonStr = JSON.stringify(formData); // 参数化执行插入 db.executeSql( `INSERT INTO app_data (biz_type, json_content, update_time) VALUES (?, ?, ?)`, [2, jsonStr, Date.now()] ); } catch (e) { // 捕获循环引用等序列化异常 console.error("JSON序列化失败:", e); }
3. 查询数据后反序列化为对象
读取到TEXT字段内容后,用JSON.parse()转回JS对象即可,建议加异常捕获防止脏数据导致崩溃:
db.executeSql( `SELECT * FROM app_data WHERE biz_type = ?`, [2], (res) => { for (let i = 0; i < res.rows.length; i++) { const row = res.rows.item(i); try { const parsedData = JSON.parse(row.json_content); // 此处即可正常使用解析后的JSON对象 console.log("读取结果:", parsedData); } catch (e) { console.error("JSON解析失败,内容已损坏:", e); } } } );
实用注意事项
- 若需要根据JSON内部字段做查询过滤,可直接使用SQLite内置的JSON函数,无需全量读取数据后再筛选,例如查询开启自动同步的记录:
SELECT * FROM app_data WHERE json_extract(json_content, '$.config.autoSync') = 1 - 批量写入大量JSON数据时,建议开启事务,能大幅提升写入性能。
- 不要存储结构层级过深、体积过大的JSON对象,单条记录体积过大会影响查询效率。
内容的提问来源于stack exchange,提问作者Tea Tree
相关产品推荐
相关产品推荐

