【问题标题】:UPDATED: How can I Insert a Json object inside a Json Array to SQLite更新:如何在 Json 数组中插入 Json 对象到 SQLite
【发布时间】:2017-07-04 01:22:36
【问题描述】:

您好,如何获取此 Json 响应并将其插入 Android SQLite。 希望您能指导我如何在 Object

中的 Json 数组 中获取此 Json 对象
{
  "error": false,
  "sl_summ": [
    {
      "sl_desc": "PA : Savings Account",
      "tr_date": "2015-08-17",
      "actual_balance": "483.67",
      "available_balance": "483.67"
    },
    {
      "sl_desc": "PA : Savings - Cash Bond",
      "tr_date": "2015-08-28",
      "actual_balance": "10129.43",
      "available_balance": "10129.43"
    }
  ]
}

这是我的整个 JSON 响应。第一个 Json 对象(用户)已成功解析并插入数据库,但第二个 Json 响应(sl_summ)解析失败且未插入。这就是我的问题。

{  
  "error": false,
  "user": {
    "br_code": 12,
    "mem_id": 13,
    "username": "novalyn",
    "email": "gsac_tabaco@yahoo.com",
    "created_at": "2016-07-22 09:05:21"
  }
}
{
  "error": false,
  "sl_summ": 
  [
    {
      "sl_desc": "PA : Savings Account",
      "tr_date": "2015-08-17",
      "actual_balance": "483.67",
      "available_balance": "483.67"
    },
    {
      "sl_desc": "PA : Savings - Cash Bond",
      "tr_date": "2015-08-28",
      "actual_balance": "10129.43",
      "available_balance": "10129.43"
    }
  ]
}

这是 Logcat 消息

D/RegisterActivity: Login Response: {"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@yahoo.com","created_at":"2016-07-22 09:05:21"}}{"error":false,"sl_summ":[{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]}
07-05 16:19:15.068 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/ViewRootImpl@dd06ab4[LoginActivity]: dispatchDetachedFromWindow
07-05 16:19:15.083 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/InputTransport: Input channel destroyed: fd=76
07-05 16:19:15.084 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/RegisterActivity: Checking JSON Object{"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@yahoo.com","created_at":"2016-07-22 09:05:21"}}
07-05 16:19:15.085 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/TEST: -error attribute             : false
07-05 16:19:15.094 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SessionManager: User login session modified!
07-05 16:19:15.095 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/USER: -user object     : {"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@yahoo.com","created_at":"2016-07-22 09:05:21"}
07-05 16:19:15.095 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/USER: -br_code         : 12
07-05 16:19:15.095 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/USER: -mem_id          : 13
07-05 16:19:15.095 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/USER: -username        : novalyn
07-05 16:19:15.095 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/USER: -email           : gsac_tabaco@yahoo.com
07-05 16:19:15.095 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/USER: -created at      : 2016-07-22 09:05:21
07-05 16:19:15.117 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: New member was inserted into table members: 13
07-05 16:19:15.117 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: BR CODE: 12
07-05 16:19:15.117 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Member ID: 13
07-05 16:19:15.117 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Username: novalyn
07-05 16:19:15.117 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Email: gsac_tabaco@yahoo.com
07-05 16:19:15.117 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/SQLiteHandler: Created at: 2016-07-22 09:05:21
07-05 16:19:15.118 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/sl_summ: JSON String                  : {"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@yahoo.com","created_at":"2016-07-22 09:05:21"}}
07-05 16:19:15.118 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/sl_summ: -error attribute             : false
07-05 16:19:15.119 20514-20514/ph.coredev.johnjessbayutas.gsacmobileportal D/TEST: org.json.JSONException: No value for sl_summ

我注意到只返回了第一个响应

D/sl_summ: JSON String : {"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@yahoo.com","created_at":"2016-07-22 09:05:21"}}
D/sl_summ: -error attribute             : false
D/TEST: org.json.JSONException: No value for sl_summ

【问题讨论】:

  • 嗨,我不清楚你的问题。你想知道如何 a) 解析 JSON b) 在 SQLite 中保存 JSON c) 能够从 SQLite 中获取对象
  • a、b 和 c 先生@RuchiraRandana。我想解析 json 并将其保存到 SQLite 并检索对象

标签: android json android-sqlite


【解决方案1】:

这里是将json字符串转换为json对象并访问json数组及其属性的示例代码。

根据您在 SQLite 中的表架构,您可以在列中插入单个值或保留完整的 JSON 字符串,这取决于您的要求。

由于您有 2 个不同的 json 字符串正在处理,并且如果您不知道哪个先来,那么您可以随时检查 JSONObject 用户或 JSONArray sl_summ 是否存在,并且根据您可以按如下方式处理它们。请注意,这是最粗暴的做法,我更新了代码只是为了让您继续前进,还有许多其他检查方式。

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONObject;

public static void jsonExample() {
    String loginString = "{\"error\":false, \"user\":{\"br_code\":12,\"mem_id\":13,\"username\":\"test\",\"email\":\"test@yahoo.com\",\"created_at\":\"2016-07-22 09:05:21\"}}";
    String jsonString = "{\"error\": false,\"sl_summ\":[{ \"sl_desc\": \"PA : Savings Account\", \"tr_date\": \"2015-08-17\", \"actual_balance\": \"483.67\", \"available_balance\": \"483.67\" }, { \"sl_desc\": \"PA : Savings - Cash Bond\", \"tr_date\": \"2015-08-28\", \"actual_balance\": \"10129.43\", \"available_balance\": \"10129.43\" } ] }";
    try {
        Log.d("TEST", "INPUT String                 : " + jsonString);
        JSONObject accountJSONObject = new JSONObject(jsonString);
        displaySubAttributes(accountJSONObject);
        Log.d("TEST", "INPUT String                 : " + loginString);
        JSONObject loginJSONObject = new JSONObject(loginString);
        displaySubAttributes(loginJSONObject);
    } catch (Exception exception) {
        Log.d("TEST", exception.toString());
    }
}

public static void displaySubAttributes(JSONObject jsonObject)  throws Exception {
    // read the json string into a json object
    Log.d("TEST", "JSON String                  : " + jsonObject.toString());

    // access individual json object thru jsonObject.get("FIELD_NAME")
    Log.d("TEST", "-error attribute             : " + jsonObject.get("error").toString());

    JSONArray slArray = jsonObject.optJSONArray("sl_summ");

    // Check if its login data i.e. user present
    if (!jsonObject.isNull("user") && slArray == null) {
        // handle user login data
        JSONObject userJSONObject = (JSONObject) jsonObject.get("user");
        Log.d("TEST", "User                         : " + userJSONObject.toString());
        Log.d("TEST", "-br_code attribute           : " + userJSONObject.get("br_code").toString());
        Log.d("TEST", "-mem_id attribute            : " + userJSONObject.get("mem_id").toString());
        Log.d("TEST", "-username attribute          : " + userJSONObject.get("username").toString());
        Log.d("TEST", "-email attribute             : " + userJSONObject.get("email").toString());
        Log.d("TEST", "-created_at attribute        : " + userJSONObject.get("created_at").toString());
        // Check if its account data i.e. sl_summ is present
    } else if (slArray != null && jsonObject.isNull("user")) {
        // handle account data
        JSONArray array = ((JSONArray)jsonObject.getJSONArray("sl_summ"));
        // access individual json array thru jsonObject.getJSONArray("FIELD_NAME")
        Log.d("TEST", "-sl_summ array               : " + jsonObject.getJSONArray("sl_summ").toString());
        for (int index=0; index<array.length(); index++) {
            JSONObject object = (JSONObject)array.get(index);
            Log.d("TEST", "-sl_desc attribute           : " + object.get("sl_desc").toString());
            Log.d("TEST", "-tr_date attribute           : " + object.get("tr_date").toString());
            Log.d("TEST", "-actual_balance attribute    : " + object.get("actual_balance").toString());
            Log.d("TEST", "-available_balance attribute : " + object.get("available_balance").toString());
            Log.d("TEST", "---------------------------------");
        }
    } else {
        // a new JSON string that doesn't have user or sl_summ as member variable so display it and write new handler code
        Log.d("TEST", "Unknown JSON String          : " + jsonObject.toString());
    }
}

示例日志

07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: INPUT String                 : {"error": false,"sl_summ":[{ "sl_desc": "PA : Savings Account", "tr_date": "2015-08-17", "actual_balance": "483.67", "available_balance": "483.67" }, { "sl_desc": "PA : Savings - Cash Bond", "tr_date": "2015-08-28", "actual_balance": "10129.43", "available_balance": "10129.43" } ] }
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: JSON String                  : {"error":false,"sl_summ":[{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]}
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -error attribute             : false
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -sl_summ array               : [{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -sl_desc attribute           : PA : Savings Account
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -tr_date attribute           : 2015-08-17
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -actual_balance attribute    : 483.67
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -available_balance attribute : 483.67
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: ---------------------------------
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -sl_desc attribute           : PA : Savings - Cash Bond
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -tr_date attribute           : 2015-08-28
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -actual_balance attribute    : 10129.43
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: -available_balance attribute : 10129.43
07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: ---------------------------------

07-05 16:04:13.352 15643-15643/com.testing.test D/TEST: INPUT String                 : {"error":false, "user":{"br_code":12,"mem_id":13,"username":"test","email":"test@yahoo.com","created_at":"2016-07-22 09:05:21"}}
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: JSON String                  : {"error":false,"user":{"br_code":12,"mem_id":13,"username":"test","email":"test@yahoo.com","created_at":"2016-07-22 09:05:21"}}
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -error attribute             : false
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: User                         : {"br_code":12,"mem_id":13,"username":"test","email":"test@yahoo.com","created_at":"2016-07-22 09:05:21"}
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -br_code attribute           : 12
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -mem_id attribute            : 13
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -username attribute          : test
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -email attribute             : test@yahoo.com
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -created_at attribute        : 2016-07-22 09:05:21

【讨论】:

  • 先生,如果我在先生上面的另一个 json 响应之前有另一个 json 怎么办。就像我登录并验证用户是否存在一样。它将返回用户的 json 响应,{ "error": false, "user": { "br_code": 12, "mem_id": 13, "username": "test", "email": "test@yahoo .com", "created_at": "2016-07-22 09:05:21" } }
  • 先生,我会更新我的问题或提出一个新问题。希望你能帮助我先生。我试过你的代码,但 D/TEST:org.json.JSONException: No value for sl_summ
  • 嗨新手,我已经更新了我的代码,以便它可以处理您的两个 JSON 字符串(即一个与用户一起使用,另一个与 sl_summ 一起处理)。当您尝试使用我的第一个代码解析用户 json 字符串时,您得到“sl_summ 没有价值”,该代码只是为处理 sl_summ 而构建的,但现在它可以同时处理两者。您需要注意的重要一点是您应该知道您的输入 JSON 字符串,然后相应地对其进行解析。我正在检查 JSONObject 是否具有用户密钥或 sl_summ 数组,然后我以不同的方式处理它们。试试代码,如果它解决了您的问题,请告诉我,请接受答案。
  • 先生,我只有 1 条回复。但是 1 个响应中有两个不同的 json 对象登录响应:{"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"gsac_tabaco@ yahoo.com","created_at":"2016-07-22 09:05:21"}}{"error":false,"sl_summ":[{"sl_desc":"PA : Savings Account","tr_date" :"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28 ","actual_balance":"10129.43","available_balance":"10129.43"}]}
  • public void onResponse(String response) { Log.d(TAG, "Login Response:" + response.toString());
【解决方案2】:

您可以按照以下步骤操作:

JSONObject jsonObject = new JSONObject("Your JSON String here");

String error=jsonObject.getString("");

JSONArray s1_sum = jsonObject.getJSONArray("sl_summ");

int s1_sum_length = s1_sum.length();

for (int i = 0; i < s1_sum_length; i++) {
String individualString = statementtag.getJSONObject(i);
sl_desc = individualString.getString("sl_desc");
tr_date = individualString.getString("tr_date");
actual_balance = individualString.getString("actual_balance");
available_balance = individualString.getString("available_balance");

//YOU CAN WRITE INSERT QUERY HERE
}

【讨论】:

    【解决方案3】:

    这里调用解析(传递响应)

    getParsing(response.body().string());
    

    解析方法在这里

    public void getParsing(String jsonresponse) {
    
    
            try {
                JSONArray responseArray = new JSONArray(jsonresponse);
                for (int i = 0; i < responseArray.length(); i++) {
                    JSONObject responseObject = responseArray.getJSONObject(i);
                    String mId = responseArray.optString("KEY_TAG to get value ID");
                    String mName = responseArray.optString("KEY_TAG to get value Name");
                    .
                    .
    
                    loginDataBaseAdapter = loginDataBaseAdapter.open();
                    loginDataBaseAdapter.insertRole(mId, mName);
    
                    loginDataBaseAdapter.close();
    
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
        }
    

    你的插入查询就像

    public void insertRole(String id, String name) {
            String selectQuery = "SELECT  * FROM " + DATABASE_ROLES + " WHERE id = '" + name + "'";
            db = dbHelper.getWritableDatabase();
    
            Cursor cursor = db.rawQuery(selectQuery, null);
            if (cursor.getCount() > 0) {
                ContentValues newValues = new ContentValues();
                // Assign values for each row.
                newValues.put("id", id);
                newValues.put("name", name);
    
                int rowsUpdated = db.update(DATABASE_ROLES, newValues, "id= '" + id+ "'", null);
                Log.v("resultState", "resultState==" + rowsUpdated);
    
            } else {
                ContentValues newValues = new ContentValues();
                // Assign values for each row.
                newValues.put("id", id);
                newValues.put("name", name);
    
                long result = db.insert(DATABASE_ROLES, null, newValues);
                Log.v("resultState", "resultState==" + result);
    
            }
            cursor.close();
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      相关资源
      最近更新 更多