Php 如何修复Json中X的无值

Php 如何修复Json中X的无值,php,android,json,api,Php,Android,Json,Api,Json错误:sl_summ没有值 php代码 If($user_sldtl != null) { for($i = 0; $i < count($user_sldtl); $i++){ $sl_response["error"] = FALSE; $sl_response["sl_summ"]["sl_brcode"] = $user_sldtl[$i][0]; $sl_respo

Json错误:sl_summ没有值

php代码

If($user_sldtl != null) {
   for($i = 0; $i < count($user_sldtl); $i++){
       $sl_response["error"] = FALSE;
       $sl_response["sl_summ"]["sl_brcode"] = $user_sldtl[$i][0];
       $sl_response["sl_summ"]["sl_memid"] = $user_sldtl[$i][3];
       $sl_response["sl_summ"]["sl_desc"] = $user_sldtl[$i][7];
       $sl_response["sl_summ"]["tr_date"] = $user_sldtl[$i][10];
       $sl_response["sl_summ"]["actual_balance"] = $user_sldtl[$i][14];
       $sl_response["sl_summ"]["available_balance"] = $user_sldtl[$i][14];
       json_encode($sl_response, true);
       echo json_encode($sl_response, true);
              //echo "<br>";
    }

         }
         else {
             // echo "Member's data not found"."<br />";
             // echo "Var dump: ";
             // var_dump($user);
             // echo " ->No record found";
             $sl_response["error"] = TRUE;
             $sl_response["error_msg"] = "NO SL Details found!";
             echo json_encode($sl_response);
         }
SQLiteHandler.java

   public void addUserSLDTL(String sl_brcode, String sl_memid, String sl_desc, String tr_date, String  actual_balance, String avail_balance){
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(SL_BRCODE, sl_brcode); // sl branch code
    values.put(SL_MEMID, sl_memid); // sl mem id
    values.put(SL_DESC, sl_desc); // sl desc
    values.put(TR_DATE, tr_date); // trans date
    values.put(ACTUAL_BALANCE, actual_balance); // actual balance
    values.put(AVAILABLE_BALANCE, avail_balance); // availabe balance

    // Inserting Row
    long id = db.insert(TABLE_MEMBERS_SLDTL, null, values);
    db.close(); // Closing database connection

    Log.d(TAG, "User SL Details inserted into sqlite: " + id);
}

   public HashMap<String, String> getUserSLDTL() {
    HashMap<String, String> sl_summ = new HashMap<String, String>();
    String selectQuery = "SELECT  * FROM " + TABLE_MEMBERS_SLDTL;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    if (cursor.getCount() > 0) {
        sl_summ.put("sl_brcode", cursor.getString(0));
        sl_summ.put("sl_memid", cursor.getString(1));
        sl_summ.put("sl_desc", cursor.getString(2));
        sl_summ.put("tr_date", cursor.getString(3));
        sl_summ.put("actual_balance", cursor.getString(4));
        sl_summ.put("avail_balance", cursor.getString(5));
    }
    cursor.close();
    db.close();

    // return user
    Log.d(TAG, "Fetching user from Sqlite: " + sl_summ.toString());

    return sl_summ;
}
public void addUserSLDTL(字符串sl_brcode、字符串sl_memid、字符串sl_desc、字符串tru日期、字符串实际余额、字符串可用余额){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(SL_BRCODE,SL_BRCODE);//SL分支代码
value.put(SL_MEMID,SL_MEMID);//SL mem id
value.put(SL_DESC,SL_DESC);//SL DESC
value.put(TR_DATE,TR_DATE);//trans DATE
value.put(实际余额,实际余额);//实际余额
value.put(可用余额,可用余额);//可用余额
//插入行
long id=db.insert(TABLE_MEMBERS_SLDTL,null,value);
db.close();//关闭数据库连接
Log.d(标签,“插入sqlite的用户SL详细信息:”+id);
}
公共HashMap getUserSLDTL(){
HashMap sl_summ=新HashMap();
String selectQuery=“SELECT*FROM”+表\u成员\u SLDTL;
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
//移到第一排
cursor.moveToFirst();
if(cursor.getCount()>0){
sl_sum.put(“sl_brcode”,cursor.getString(0));
sl_sum.put(“sl_memid”,cursor.getString(1));
sl_sum.put(“sl_desc”,cursor.getString(2));
sl_summa.put(“tr_date”,cursor.getString(3));
sl_summa.put(“实际余额”,cursor.getString(4));
sl_summa.put(“avail_balance”,cursor.getString(5));
}
cursor.close();
db.close();
//返回用户
Log.d(标记,“从Sqlite获取用户:”+sl_sum.toString());
返回sl_总和;
}

正如您所说,您已经解析了用户数据

对于sl_summ,请使用以下内容:

我已将您的响应记录在一个字符串中,您可以直接从您的响应中执行此操作:

private static String sl_summResponse = "{\n" +
            "  \"error\": false,\n" +
            "  \"sl_summ\": {\n" +
            "    \"sl_brcode\": \"12\",\n" +
            "    \"sl_memid\": \"13\",\n" +
            "    \"sl_desc\": \"PA : Savings Account\",\n" +
            "    \"tr_date\": \"2015-08-17\",\n" +
            "    \"actual_balance\": \"483.67\",\n" +
            "    \"available_balance\": \"483.67\"\n" +
            "  }\n" +
            "},\n" +
            "{\n" +
            "  \"error\": false,\n" +
            "  \"sl_summ\": {\n" +
            "    \"sl_brcode\": \"12\",\n" +
            "    \"sl_memid\": \"13\",\n" +
            "    \"sl_desc\": \"PA : Savings - Cash Bond\",\n" +
            "    \"tr_date\": \"2015-08-28\",\n" +
            "    \"actual_balance\": \"10129.43\",\n" +
            "    \"available_balance\": \"10129.43\"\n" +
            "  }\n" +
            "}";
然后像这样解析您的响应:

try {
            JSONObject jObj = new JSONObject(sl_summResponse);
            Boolean error = jObj.getBoolean("error");
            Log.e("Test","Error : "+error);
            if (!error){
                JSONArray sl_summ = jObj.optJSONArray("sl_summ");
                for (int i =0;i<sl_summ.length();i++){
                    JSONObject rootObj = sl_summ.getJSONObject(i);
                    String sl_brcode = rootObj.getString("sl_brcode");
                    String sl_memid = rootObj.getString("sl_memid");
                    String sl_desc = rootObj.getString("sl_desc");
                    String tr_date = rootObj.getString("tr_date");
                    String actual_balance = rootObj.getString("actual_balance");
                    String avail_balance = rootObj.getString("avail_balance");
                    // then do whatever you want with this data
                    // Inserting row in users table
                    db.addUserSLDTL(sl_brcode, sl_memid, sl_desc, tr_date, actual_balance, avail_balance);
                }
            }
试试看{
JSONObject jObj=新的JSONObject(sl_summaresponse);
布尔错误=jObj.getBoolean(“错误”);
Log.e(“测试”,“错误:+错误”);
如果(!错误){
JSONArray sl_summ=jObj.optJSONArray(“sl_summ”);

对于(int i=0;isorry不理解您的问题,请您详细说明一下??当我登录时,它将重新运行一个Json错误:sl_summ没有值。即使它在sl_summ中有值。您可以共享代码吗登录期间如何获得Json?您可以打印您获得的完整响应并共享它,因为您共享的响应是不完整??在我成功登录之前,但当我将代码从JSONObject sl_sum=jObj.getJSONObject(“sl_sum”)添加到db.addUserSLDTL(sl_brcode,sl_memid,sl_desc,tr_date,实际余额,可用余额);很快。出现了错误。但是,先生,我不知道私有静态字符串sl_summResponse的确切值。因为数据是动态的,它将取决于表“sl”中的数据是什么"有些用户在SL表中有1个数据,有些用户有2个或更多…我如何使其成为动态的,先生?Np,无论值是多少,我已经获取了数组,无论它有一个值还是20都不会有任何区别。它已经是动态的,先生,你能给我解释一下私有静态字符串SL_summResponse是如何工作的吗?在你的SL_summResponse中,你会得到一个我拥有的数组如果你想了解更多google如何解析JSON数组的话,你可以使用类似于你解析用户对象的方法来解析这个数组。
try {
            JSONObject jObj = new JSONObject(sl_summResponse);
            Boolean error = jObj.getBoolean("error");
            Log.e("Test","Error : "+error);
            if (!error){
                JSONArray sl_summ = jObj.optJSONArray("sl_summ");
                for (int i =0;i<sl_summ.length();i++){
                    JSONObject rootObj = sl_summ.getJSONObject(i);
                    String sl_brcode = rootObj.getString("sl_brcode");
                    String sl_memid = rootObj.getString("sl_memid");
                    String sl_desc = rootObj.getString("sl_desc");
                    String tr_date = rootObj.getString("tr_date");
                    String actual_balance = rootObj.getString("actual_balance");
                    String avail_balance = rootObj.getString("avail_balance");
                    // then do whatever you want with this data
                    // Inserting row in users table
                    db.addUserSLDTL(sl_brcode, sl_memid, sl_desc, tr_date, actual_balance, avail_balance);
                }
            }