Как сохранить объект JSON в базе данных SQLite

34

как я могу хранить объект JSON в базе данных SQLite? Каков правильный путь?

одно место - столбец типа 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();
    }
}
  • 3
    JSON - это текстовое представление данных . Так что сохраните его в сходстве столбца TEXT / type. Кодирование как BLOB просто делает больше работы / боли - не делайте этого! Конечно, получить фактический JSON из JSONObject (который не является JSON). Это можно сделать с помощью jsonObject.toString() .
  • 0
    если Sqlite не используется в обязательном порядке, то я предлагаю написать файл File.txt и сохранить весь файл Response в файле и прочитать его при необходимости.
Теги:
database

5 ответов

54
Лучший ответ

Преобразуйте JSONObject в String и сохраните как TEXT/VARCHAR. При извлечении одного и того же столбца преобразование String в JSONObject.

Например

Запись в DB

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

Чтение из DB

String json = Read_column_value_logic_here
JSONObject jsonObject = new JSONObject(json);
  • 0
    Знаете ли вы о каких-либо проблемах с производительностью, вставив его так?
  • 0
    @JohnAndrews нет. Если вы нашли, пожалуйста, обновите здесь :)
Показать ещё 12 комментариев
18

Альтернативой может быть использование нового расширения JSON для SQLite. Я только что натолкнулся на это сам: https://www.sqlite.org/json1.html Это позволит вам выполнить определенный уровень запроса сохраненного JSON. Если вы использовали VARCHAR или TEXT для хранения строки JSON, у вас не было бы возможности запросить его. Это отличная статья, показывающая его использование (в python) http://charlesleifer.com/blog/using-the-sqlite-json1-and-fts5-extensions-with-python/

  • 0
    Это великолепно!
  • 0
    И вот возможный способ сделать это на Android с помощью NDK: sqlite.org/android/doc/trunk/www/index.wiki
2

Для этого нет типов данных. Вам необходимо сохранить его только как VARCHAR или TEXT. jsonObject.toString();

0

Это довольно старый вопрос, но https://github.com/requery/sqlite-android даже позволяет запрашивать поля JSON (и массивы в них, я пробовал он и я его использую). До этого я просто записывал строки JSON в столбец TEXT. Поддерживает FTS3, FTS4 и JSON1

-7

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

Сначала сгенерировать Plain Old Java Objects из JSON http://www.jsonschema2pojo.org/

Основной метод

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

Имя полей будет динамически создаваться

Ещё вопросы

Сообщество Overcoder
Наверх
Меню