2016-04-12 20 views
0

sqliteのデータをすべての列からJSONArrayにフォーマットしようとしています。次のようにGSONを使用してJsonとしてSqliteデータを取得する方法

私のsqliteのデータの例は次のとおりです。私は列productの下で私のデータベースに文字列としてJSONArrayを保存してい

id | name | product | 
 
    
 
1 | stev |[{"id":"1","title":"box"}] 
 

 
1 | Lian |[{"id":"2","title":"bag"}] 
 
    
 
1 | beny |[{"id":"3","title":"pen"}]

gson libraryを使用してjsonArrayを作成しようとしています。

これは私がしようとしたものです:

public String composeJSONfromSQLite() { 
 

 
     ArrayList<HashMap<String, String>> offlineList; 
 
     offlineList = new ArrayList<HashMap<String, String>>(); 
 
     String selectQuery = "SELECT * FROM manyofflineCheckouts "; 
 
    
 
     SQLiteDatabase database = this.getWritableDatabase(); 
 
     Cursor cursor = database.rawQuery(selectQuery, null); 
 
    
 
     if (cursor.moveToFirst()) { 
 
      do { 
 
       HashMap<String, String> map = new HashMap<String, String>(); 
 
       map.put(cursor.getString(0)); 
 
       map.put(cursor.getString(1)); 
 
       map.put(cursor.getString(2)); 
 
       offlineList.add(map); 
 

 
      } while (cursor.moveToNext()); 
 
     } 
 
     database.close(); 
 

 
     Gson gson = new GsonBuilder().create(); 
 

 
     //Use GSON to serialize Array List to JSON 
 

 
     return gson.toJson(offlineList); 
 
    }

をこれは、しかし、の形式で私を与える:

[ 
 
\t { 
 
    \t "id":"1", 
 
    \t "name":"stev", 
 
    \t "product":"[{"id":"1","title":"box"}]" 
 
\t }, 
 
\t { 
 
    \t "id":"2", 
 
    \t "name":"Lian", 
 
    \t "product":"[{"id":"2","title":"bag"}]" 
 
\t } 
 
]

のThは正しい製品ではありませんJson製品配列を囲む二重引用符のため"product":"[{"id":"1","title":"box"}]"

これを行う方法はありますか?

+0

を言っているの代わりにcursor.getString(2)

gson.fromJson(cursor.getString(2), Object[].class)は、おそらくここで

はデモで、あなたのケースで動作しますあなたが見る文字列の代わりにJSON配列ですか? –

答えて

1

これを解決できる方法の1つは、product json文字列を最初に解析することです。

Gson gson = new GsonBuilder().create(); 

ArrayList<HashMap<String, Object>> offlineList = new ArrayList<>(); 

// here is what i'm taking about 
String product = "[{\"id\":\"2\",\"title\":\"bag\"}]"; 
Object[] productObj = gson.fromJson(product, Object[].class) 

HashMap<String, Object> map = new HashMap<>(); 
map.put("product", productObj); 
map.put("id", 1); 
map.put("name", "stev"); 
offlineList.add(map); 

System.out.println(gson.toJson(offlineList)); 

結果:あなたは、製品の価値になりたい

[ 
    { 
    "product": [ 
     { 
     "id": "2", 
     "title": "bag" 
     } 
    ], 
    "id": 1, 
    "name": "stev" 
    } 
] 
+0

これは実際に働いた!素晴らしいアイデア、ありがとう男! –

関連する問題