【问题标题】:ANDROID - How to Seperate JSONObject value from sqlite fieldANDROID - 如何从 sqlite 字段中分离 JSONObject 值
【发布时间】: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 分开?

【问题讨论】:

    标签: java android json sqlite


    【解决方案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 linkyour 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);
      

      【讨论】:

        猜你喜欢
        • 2019-05-15
        • 1970-01-01
        • 2020-12-14
        • 2013-10-31
        • 1970-01-01
        • 2011-03-02
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多