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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:06:10