ANDROID - 如何从 sqlite 字段中分离 JSONObject 值
Posted
技术标签:
【中文标题】ANDROID - 如何从 sqlite 字段中分离 JSONObject 值【英文标题】:ANDROID - How to Seperate JSONObject value from sqlite field 【发布时间】:2018-05-06 23:29:26 【问题描述】:我在android中有一个sqlite
,sqlite
的结构是这样的:
|---------|-------------------|
| id | name (BLOB type) |
| 1 | jsonObject value |
| 2 | jsonObject value |
|---------|-------------------|
jsonobject value
的样本值为:
"AuditScheduleDetailID":12422,"AuditAnswerId":3,"LocalFindingID":9,"LocalMediaID":18,"Files":"xxx","ExtFiles":"jpg"
问题:
当我想在listview
或log
中显示时,是否可以将这些jsonobject value
分开?
【问题讨论】:
【参考方案1】:您可以将JsonObject
存储为字符串并使用Cursor
检索并将String
转换为JsonObject
JsonObject j= new JsonObject(cursor.getString("",""));
String s=j.getString("find_your _param");
【讨论】:
【参考方案2】:JSONArray Obj;
Obj = your value get from sqlite.
if (Obj != null)
try
for (int j = 0; j < Obj.length(); j++)
JSONObject jsonObject = Obj.getJSONObject(j);
String AuditScheduleDetailID=
jsonObject.optString("AuditScheduleDetailID");
// etc ...your other values
catch (Exception e)
e.printStackTrace();
根据链接:
for (Contact cn : contacts)
String AuditScheduleDetailID=cn.getID();
String Name= cn.getName();
【讨论】:
当我尝试上面的代码时,当我使用Obj=db.getAllContact();
时出现错误,android studio 告诉我使用Obj=(JSONArray) db.getAllContact()
但该代码给了我一个错误java.util.ArrayList cannot be cast to org.json.JSONArray
不,你可以这样做 Obj =""AuditScheduleDetailID":12422,"AuditAnswerId":3,"LocalFindingID":9,"LocalMediaID":18,"Files":"xxx", "ExtFiles":"jpg"" 否则显示完整代码。
关于完整代码,我指的是this link,your value get from sqlite
的类型数据是String
而不是JsonArray
【参考方案3】:
如果您将数据作为 json 对象存储在数据库列中,您将失去一些功能,例如通过该 json 对象中的字段更有效地查询。例如,通过 id=1 选择会得到一个 json 对象或 json 数组 'foo':'bar'
,但您不能有效地选择每个具有 foo=bar 的元组。
您可以设计您的数据库以根据 json 对象字段接受列。例如“AuditScheduleDetailID”是一列(等)。
有时 json 数据无法轻松映射到单个表中的列(例如当您有完全不同的 json 对象时)。 简单的解决方案是将它们存储在文件中并将它们组织在文件夹中。
为了回答您的问题,我建议使用 json 序列化器/解析器,例如 google gson。它用于将从数据库中检索到的字符串(name
字段)转换为适当的类(如Contact
)。除非您在 name
列中的数据完全不同(例如 Contact 类、Person 类和 Car 类),否则您将拥有由 Gson 填充的属性的对象。如果包含品种,您需要重新考虑您的设计并将不相关的对象移动到另一个表中。比如有一个Contact
表、一个Person
表等等。
Gson 的文档是 here。一个简单的例子是:
Contact c = new Gson().fromJson(YOUR_JSON_OBJECT_STRING, Contact.class);
【讨论】:
以上是关于ANDROID - 如何从 sqlite 字段中分离 JSONObject 值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Sqlite ( android ) 中的 datetime 字段获取日期