如何使用 GSON 获取 Json 的 Sqlite 数据
How to get Sqlite data as Json using GSON
我正在尝试将所有列中的 sqlite
数据格式化为 JSONArray
。
我的sqlite数据示例如下:
id | name | product |
1 | stev |[{"id":"1","title":"box"}]
1 | Lian |[{"id":"2","title":"bag"}]
1 | beny |[{"id":"3","title":"pen"}]
我将 JSONArray
作为字符串保存在数据库中的 product
列下。
我正在尝试使用 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);
}
然而,这给我的格式是:
[
{
"id":"1",
"name":"stev",
"product":"[{"id":"1","title":"box"}]"
},
{
"id":"2",
"name":"Lian",
"product":"[{"id":"2","title":"bag"}]"
}
]
这不是正确的 Json
格式,因为产品数组 "product":"[{"id":"1","title":"box"}]"
周围有双引号
有办法吗?
解决此问题的一种方法是先解析 product
json 字符串。
gson.fromJson(cursor.getString(2), Object[].class)
而不是 cursor.getString(2)
可能适用于您的情况
这是演示:
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"
}
]
我正在尝试将所有列中的 sqlite
数据格式化为 JSONArray
。
我的sqlite数据示例如下:
id | name | product |
1 | stev |[{"id":"1","title":"box"}]
1 | Lian |[{"id":"2","title":"bag"}]
1 | beny |[{"id":"3","title":"pen"}]
我将 JSONArray
作为字符串保存在数据库中的 product
列下。
我正在尝试使用 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);
}
然而,这给我的格式是:
[
{
"id":"1",
"name":"stev",
"product":"[{"id":"1","title":"box"}]"
},
{
"id":"2",
"name":"Lian",
"product":"[{"id":"2","title":"bag"}]"
}
]
这不是正确的 Json
格式,因为产品数组 "product":"[{"id":"1","title":"box"}]"
有办法吗?
解决此问题的一种方法是先解析 product
json 字符串。
gson.fromJson(cursor.getString(2), Object[].class)
而不是 cursor.getString(2)
可能适用于您的情况
这是演示:
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"
}
]