.json. jsonexception:在字符0处输入结束


org.json.JSONException: End of input at character 0 of

在Volley库中JSONObjectRequest接收JSON数据存在一些问题。我想我在Java代码中接收JSON对象的某个地方出错了。以下是我的JSON输出,作为服务器上托管的php文件的响应:

{"workers":[
           {"id":"1","name":"Raja","phonenumber":"66589952","occupation":"Plumber","location":"Salunke Vihar","rating":"4","Review":"Hard Worker","price":"80"},
           {"id":"2","name":"Aman","phonenumber":"789456","occupation":"Plumber","location":"Wakad","rating":"4","Review":"Good","price":"80"}
          ],
"success":1}

以下是来自Java文件的代码,我正在使用使用Volley库的JSON请求:

JsonObjectRequest jsonRequest = new JsonObjectRequest (Request.Method.POST, url,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        // I should receive the success value 1 here
                        int success = response.getInt("success");
                        //and should receive the workers array here
                        Log.d("response",response.getJSONArray("workers").toString());
                        Log.d("success",""+success);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_LONG).show();
                    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
                    recyclerView.setHasFixedSize(true);
                    layoutManager = new LinearLayoutManager(getApplicationContext());
                    recyclerView.setLayoutManager(layoutManager);
                    //Finally initializing our adapter
                    adapter = new WorkerAdapter(listWorkers);
                    recyclerView.setAdapter(adapter);
                   //adapter is working fine
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                   Log.d("error",error.toString());
                    Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<String, String>();
            params.put("tag", "get_list");
            params.put("service", service);
            return params;
        }

运行上面的代码,它会进入错误侦听器,并给出如下输出:org.json.JSONException:但是,如果我使用StringRequest代替JsonObjectRequest并接收JSON响应作为字符串,那么我能够接收输出作为字符串,但我不能进一步使用它。所以,请让我知道我在接收JSONdata时哪里出错了,并建议我在代码中必须做的更改。

编辑-我正在添加返回JSON对象的php文件。如果这里有错误,请告诉我:

<?php
error_reporting(0);
include("config.php");
if($_SERVER['REQUEST_METHOD']=='POST'){    
$tag = $_POST['tag'];
// array for JSON response
$response = array();
if ($tag == 'get_list') {
// Request type is check Login
$service = $_POST['service'];
//echo json_encode($service);   
// get all items from myorder table
$result = mysql_query("SELECT * FROM Workers WHERE Occupation = '$service'") or die(mysql_error());
if (mysql_num_rows($result) > 0) {
    $response["workers"] = array();
    while ($row = mysql_fetch_array($result)) {
            // temp user array
            $item = array();
            $item["id"] = $row["wID"];
            $item["pic"] = $row["Pic"];
            $item["name"] = $row["Name"];
            $item["phonenumber"] = $row["Phone Number"];
            $item["occupation"] = $row["Occupation"];
            $item["location"] = $row["Location"];
            $item["rating"] = $row["Rating"];
            $item["Review"] = $row["Review"];
            $item["price"] = $row["Price"];

            // push ordered items into response array
            array_push($response["workers"], $item);
           }
      // success
     $response["success"] = 1;
}
else {
    // order is empty
      $response["success"] = 0;
      $response["message"] = "No Items Found";
}
}   
echo json_encode($response);    
}
?>

当我运行api端点时,我得到了以下结果,而不是您一直告诉我的结果。

"Plumber"{"workers":[{"id":"1","pic":"ttp:'/'/vorkal.com'/images'/vorkal_cover.PNG","name":"Raja","phonenumber":"66589952","occupation":"Plumber","location":"Salunke Vihar","rating":"4","Review":"Hard Worker. Very Professional.","price":"80"},{"id":"2","pic":"http:'/'/vorkal.com'/images'/vorkal_cover.PNG","name":"Aman","phonenumber":"789456","occupation":"Plumber","location":"Wakad","rating":"4","Review":"Good","price":"80"}],"success":1}

其中Plumber根本不是标签,因此抛出错误,因为同样不是有效的json字符串。服务器端脚本错误。我要求你发送完整的脚本,不做任何修改。

如果您没有得到JSONObject,这意味着以下是一个畸形的json。因此,您可以在服务器端

中尝试以下代码
 function utf8ize($d) {
if (is_array($d)) {
    foreach ($d as $k => $v) {
        $d[$k] = $this->utf8ize($v);
    }
} else if (is_string ($d)) {
    return utf8_encode($d);
}
return $d;
}

其中$d为字符串/响应。使用echo json_encode($this->utf8ize($detail));

还可以在客户端代码

中尝试以下操作
Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);

你可以在这里查阅这个问题的答案,点击这里

您可以使用Gson将json字符串转换为对象

 Gson gson = new Gson();
 GetWorkersResponse getWorkersResponse =gson.fromJson(response,GetWorkersResponse.class);

 class GetWorkersResponse {
          public boolean success;
          public List<Worker> workers = new ArryList<>(); 
     }

这是我的工作

你能检查服务器返回给你一个JSONObject而不是字符串吗?在Volley中,如果响应类型不同,则返回错误。