83

如何在 SQLite 数据库中存储 JSON 对象?正确的方法是什么?

一个地方是 blob 类型列。如果我可以将 JSON 对象转换为字节数组并使用 Fileoutputstream

另一个想法是作为字符串存储在文本列中

import org.json.JSONObject;

JSONObject jsonObject;

public void createJSONObject(Fields fields) {
    jsonObject = new JSONObject();

    try {
        jsonObject.put("storedValue1", fields.storedValue1);
        jsonObject.put("storedValue2", fields.storedValue2);
        jsonObject.put("storedValue3", fields.storedValue3);
        jsonObject.put("storedValue4", fields.storedValue4);
        jsonObject.put("storedValue5", fields.storedValue5);
        jsonObject.put("storedValue6", fields.storedValue6);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
4

5 回答 5

95

将 JSONObject 转换为 String 并保存为 TEXT/VARCHAR。在检索同一列时,将 String 转换为 JSONObject。

例如

写入数据库

String stringToBeInserted = jsonObject.toString();
//and insert this string into DB

从数据库读取

String json = Read_column_value_logic_here
JSONObject jsonObject = new JSONObject(json);
于 2013-05-17T07:27:04.433 回答
40

另一种方法是使用 SQLite 的新 JSON 扩展。我自己只是遇到过这个:https ://www.sqlite.org/json1.html这将允许您执行一定级别的查询存储的 JSON。如果您使用 VARCHAR 或 TEXT 存储 JSON 字符串,您将无法查询它。这是一篇很棒的文章,展示了它的用法(在 python 中)http://charlesleifer.com/blog/using-the-sqlite-json1-and-fts5-extensions-with-python/

于 2015-11-18T15:30:13.573 回答
4

没有数据类型..您只需将其存储为 VARCHAR 或 TEXT ..jsonObject.toString();

于 2013-05-17T07:26:23.493 回答
1

https://github.com/requery/sqlite-android允许您查询 JSON 字段(以及其中的数组,我已经尝试过并且正在使用它)。在此之前,我只是将 JSON 字符串存储到 TEXT 列中。它支持 FTS3、FTS4 和 JSON1

截至 2019 年 7 月,它仍然时不时地出现版本冲突,所以它不是一个死项目。

于 2017-05-23T20:24:31.093 回答
-9

https://github.com/app-z/Json-to-SQLite

首先从 JSON http://www.jsonschema2pojo.org/生成普通的旧 Java 对象

主要方法

void createDb(String dbName, String tableName, List dataList, Field[] fields){ ...

字段名称将动态创建

于 2015-01-06T15:49:30.207 回答