无法解析json并在json中获取意外令牌


Cant parse json and get Unexpected token in JSON

我使用php将数据从服务器发送到我的android应用程序。代码在php中运行任何错误,但我在android应用程序中遇到了无法解析json的错误。我引出json并将其标记到http://json.parser.online.fr/它向我显示了SyntaxError:JSON中位于0位置的意外令牌错误这是我的php代码:

function selectAll($cnn)
{
    $query="SELECT * FROM user";
    $stmt=$cnn->prepare($query);
    $stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
     $result[]=$row;
    }
    return $result;
    }
echo(json_encode(array('result' => $arr)));

这是我用php 生成的json数据

当然这是我的安卓代码:

public class ManageUser extends AppCompatActivity  implements RecyclerItemClickListener.OnItemClickListener {
    RecyclerView recyclerView;
    ProgressBar progressBar;
    List<user> listOfUser=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_manage_user);
        progressBar=(ProgressBar)findViewById(R.id.UserProgress);
        recyclerView=(RecyclerView)findViewById(R.id.recviewUser);
        recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this,this));
        SelectAllUserNetworkTask GetAllUser=new SelectAllUserNetworkTask(this);
        GetAllUser.execute();
    }
    @Override
    public void onItemClick(View childView, int position) {
        Toast.makeText(this,"Clicked trigger",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onItemLongPress(View childView, int position) {
        Toast.makeText(this,"LongPress",Toast.LENGTH_SHORT).show();
    }
    public class SelectAllUserNetworkTask extends AsyncTask {
        Context myContext;
        List<user> productarray =new ArrayList<>();
        private OkHttpClient client=new OkHttpClient();
        public  String Result;
        public SelectAllUserNetworkTask(Context context)
        {
            this.myContext=context;
        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
        }
        @Override
        protected Object doInBackground(Object[] params) {
            try {
                RequestBody requestBody;
                requestBody = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("action","select")
                        .build();
                Request request = new Request.Builder()
                        .url(Tags.UserAddress)
                        .post(requestBody)
                        .build();
                Response response = client.newCall(request).execute();
                Result=response.body().string().toString();
                 String str=Result.substring(Result.indexOf("{"), Result.lastIndexOf("}"));
                JSONObject jsonObject=new JSONObject(str);
                JSONArray jsonArray = jsonObject.getJSONArray("result");
                for (int i=0;i<jsonArray.length();i++) {
                    JSONObject jobject =  jsonArray.getJSONObject(i);
                    user myUser =new user();
                    myUser.setUsId(jobject.getInt("id"));
                    myUser.setName(jobject.getString("name"));
                    myUser.setLastName(jobject.getString("lastname"));
                    myUser.setEmail(jobject.getString("email"));
                    myUser.setPassword(jobject.getString("password"));
                    myUser.setImage(jobject.getString("image"));
                    myUser.setGender(jobject.getString("gender"));
                    myUser.setBirthDay(jobject.getString("birthday"));
                    myUser.setFavFilm(jobject.getString("favFilm"));
                    myUser.setFavColor(jobject.getString("favColor"));
                    myUser.setAboutMe(jobject.getString("aboutme"));
                    myUser.setAdmin(jobject.getInt("admin"));
                    productarray.add(myUser);
                }
              /*  Type typeList=new TypeToken<List<ModelProduct>>(){}.getType();
                productarray=new Gson().fromJson(jsonObject.getString("result"),typeList);*/
                listOfUser = productarray;
                return productarray;
            }  catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return  null;
        }
        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            progressBar.setVisibility(View.GONE);
            recyclerView.setHasFixedSize(true);
            LinearLayoutManager llm = new LinearLayoutManager(myContext);
            llm.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(llm);
            UserAdapter ca=new UserAdapter(listOfUser,myContext);
            recyclerView.setAdapter(ca);
        }
    }
}

您应该更改这一行

 echo(json_encode(array($arr)));

 echo(json_encode(array('result'=>$arr)));

因为您在解析过程中访问结果,而php 中不存在该结果

首先,您的JSONResponse是JSONArray而不是JSONObject的形式。因此,将响应强制转换为JSONArray将导致解析错误。

其次,我在您得到的JSON响应中没有看到任何"结果"。

您可以使用以下代码:

$result = mysqli_query($connection,"SELECT * FROM Students");
$output = array();
while($row = mysqli_fetch_array($result)){
$record = array();
$record['id'] = $row['Id'];
$record['name'] = $row['Name'];
$record['phone'] = $row['Phone'];
$output[] = $record;

}echo json_encode($output);

和在安卓方面:

          String res ;
          JSONObject jsonObject=new JSONObject(res);
          JSONArray jsonArray = jsonObject.getJSONArray("result");
          for (int i=0;i<jsonArray.length();i++) {
                JSONObject jobject =  jsonArray.getJSONObject(i);
                user myUser =new user();
                myUser.setUsId(jobject.getInt("id"));
                myUser.setName(jobject.getString("name"));
                myUser.setAdmin(jobject.getInt("phone"));
                productarray.add(myUser);
            }

我希望这能为你工作;