2017-07-04 60 views
0

好日子,如何获取这个Json响应并将其插入到Android SQLite中。 希望你能指导我如何获取这个JSON对象一个JSON数组对象更新:如何插入一个Json数组到JSON数组到SQLite

{ 
    "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": "[email protected]", 
    "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":"[email protected]","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/[email protected][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":"[email protected]","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":"[email protected]","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   : [email protected] 
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: [email protected] 
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":"[email protected]","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":"[email protected]","created_at":"2016-07-22 09:05:21"}} 
D/sl_summ: -error attribute    : false 
D/TEST: org.json.JSONException: No value for sl_summ 
+0

你好,你的问题我也不清楚。你想知道如何去解析一个JSON b)在SQLite中保存JSON c)能够从SQLite –

+0

a,b和c sir @ RuchiraRandana返回对象。我想解析JSON保存到SQLite和检索对象 – Novice

回答

0

下面是示例代码,JSON字符串转换成JSON对象和访问JSON数组及其属性。

根据你在SQLite中的表模式,你可以在列中插入单个值或保存完整的JSON字符串,这取决于你的要求。

由于您有两个不同的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\":\"[email protected]\",\"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":"[email protected]","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":"[email protected]","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":"[email protected]","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    : [email protected] 
07-05 16:04:13.353 15643-15643/com.testing.test D/TEST: -created_at attribute  : 2016-07-22 09:05:21 
+0

先生如果我有另一个JSON之前的其他JSON响应先生。就像我登录并验证用户是否存在一样。它会返回用户, { “错误” 的JSON响应:假, “用户”:{ “br_code”:12, “mem_id”:13, “用户名”: “测试”, “电子邮件“:”test @ yahoo。com“, ”created_at“:”2016-07-22 09:05:21“ } } – Novice

+0

我会提出我的问题先生或问一个新问题,希望你能帮助我先生。 /测试:org.json.JSONException:没有值sl_summ – Novice

+0

嗨新手,我更新了我的代码,以便它可以处理您的两个JSON字符串(即一个与用户和其他与sl_summ)。你得到“没有价值sl_summ “,因为你试图用我的第一个代码解析用户json字符串,而第一个代码只是构建来处理sl_summ,但现在它可以处理这两个问题。你要注意的重要一点是你应该知道你的输入JSON字符串,然后解析它。如果JSONObject具有用户密钥或sl_summ数组,然后我以不同的方式处理它们,请尝试使用代码并让我知道它是否解决了您的问题并请接受答案。 – JRG

0

下面是步骤,你可以遵循:

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 
} 
0

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

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(); 

    }