ANDROID - 如何从 sqlite 字段中分离 JSONObject 值

Posted

技术标签:

【中文标题】ANDROID - 如何从 sqlite 字段中分离 JSONObject 值【英文标题】:ANDROID - How to Seperate JSONObject value from sqlite field 【发布时间】:2018-05-06 23:29:26 【问题描述】:

我在android中有一个sqlitesqlite的结构是这样的:

|---------|-------------------|
|  id     | name (BLOB type)  |
|   1     | jsonObject value  |
|   2     | jsonObject value  |
|---------|-------------------|

jsonobject value 的样本值为:

"AuditScheduleDetailID":12422,"AuditAnswerId":3,"LocalFindingID":9,"LocalMediaID":18,"Files":"xxx","ExtFiles":"jpg"

问题:

当我想在listviewlog 中显示时,是否可以将这些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 字段获取日期

android如何绑定sqlite最新版本

Android sqlite / BLOB 性能问题

如何从表1中检索列数据并使用SQLite数据库将该列值插入到Android Studio的表2中?

如何使用 SQLite 从数据库表中获取一个字段?

如何将新列添加到 Android SQLite 数据库?