2013-05-17 14 views
38

SQLiteデータベースにJSONオブジェクトを保存するにはどうすればよいですか?正しい方法は何ですか?JSiteオブジェクトをSQLiteデータベースに保存する方法

1つの場所はブロブタイプの列です。私はバイト配列に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

したがって、それをTEXT列/親和性で保存してください。それをBLOBとしてエンコーディングするだけで、より多くの作業/苦痛をかけることができます。もちろん、実際のJSON *を 'JSONObject'から取得します(これは* JSONではありません)。これは['jsonObject.toString()'](http://www.json.org/javadoc/org/json/JSONObject.html#toString())で行うことができます。 – user2246674

+0

Sqliteが強制使用されていない場合、私の提案はFile.txtファイルを書いてファイル内のレスポンス全体を保存し、必要なときに読むこと –

答えて

56

JSONObjectを文字列に変換し、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

そのようなものを挿入することでパフォーマンスの問題を認識していますか? – JohnAndrews

+0

@JohnAndrews no。あなたが見つかった場合、ここで更新してください:) –

+0

するでしょう。私はbase64の変換されたイメージの文字列を格納するためにそのメソッドを使用しています...何が起こるか見るでしょう – JohnAndrews

2

としてテキスト列に格納することで、そのためのデータ型はありません..あなたは格納する必要がありますそれはVARCHARまたはTEXTだけです。jsonObject.toString();

18

代わりに、SQLite用の新しいJSON拡張を使用することができます。私はちょうどこれを自分自身に遭遇しただけです:https://www.sqlite.org/json1.htmlこれは、あなたが保存されたJSONのクエリの特定のレベルを実行することができます。 VARCHARまたはTEXTを使用してJSON文字列を格納した場合、それを照会する機能はありません。 http://charlesleifer.com/blog/using-the-sqlite-json1-and-fts5-extensions-with-python/

+0

これは素晴らしいです! – aalaap

+0

NDKを使用してAndroidで行う方法は次のとおりです。https://www.sqlite.org/android/doc/trunk/www/index.wiki –

0

これはかなり古い質問ですが、https://github.com/requery/sqlite-androidでもJSONフィールド(およびその中の配列、私はそれを試してみました)を照会することができます。これまではJSON文字列をTEXT列に保存していました。 [JSONは*データのテキスト表現*](http://json.org)をサポートします.FTS3、FTS4、& JSON1

関連する問題