使用java/android发送的数据在php中进行JSON迭代

我的 PHP 服务器从我的 Android 接收以下 json :


{

  "class":"SURESHOT",

  "subject":"Maths",

  "qstn":"[607421_15958169393.JPG, 410816_15958169444.JPG, 

          655502_15958169495.JPG,   625421_15958179086.JPG, 

          625421_15958179086.JPG, 461984_15958180457.JPG]",

  "ans":"[C, B, A, D, C, C]",

  "lickey":"jg2ler3xvbdgsjkru12tutujghgjgl4jkjojuir8uttzcdadasretf",

  "user":"1000",

  "result":"[fail,fail, pass, fail, fail, fail]",

  "qid":"[37, 38, 39, 40, 40, 41]"

 }

现在在 PHP 中迭代数据是不可能的。“qstn”、“ans”和“结果”是有问题的。我们怎样才能正确地做到这一点呢?


我用于json_encode(($_POST),true);初步数据转换。


这是我运行来获取 JSON 的代码:


这是我获取 json 的代码。


   reqPostanswers = new StringRequest(Request.Method.POST, urll,new  Response.Listener<String>() {

        @Override

        public void onResponse(String response) {

            //Log.i("posting info :",response.toString());

        }

    }, new Response.ErrorListener() {

        @Override

        public void onErrorResponse(VolleyError error) {

            //Log.i("posting error  :",error.toString());

        }

    }){


        @Override

        protected Map<String,String> getParams(){

            Map<String,String> params = new HashMap<String, String>();

            params.put("subject",subject);

            params.put("class",qSet[qsetCntr][0]);

            params.put("user", thisuser);

            params.put("result",resltn.toString());

            params.put("qstn",qstnn.toString());

            params.put("qid", qiddn.toString());

            params.put("ans",answn.toString());

            params.put("lickey","jg2ler3xvbdgsjkru12tutujghgjgl4jkjojuir8uttzcdadasretf");


            return params;

        }


    };

    answerpostQueue = Volley.newRequestQueue(getApplicationContext());

    answerpostQueue.add(reqPostanswers);

pram 中设置的数组或变量仅是 Arraylists。


慕桂英546537
浏览 118回答 3
3回答

慕盖茨4494581

Android 代码实际上并未将 JSON 发送到服务器。它使用旧的键值表单字段格式,无法表示复杂的对象。要解决此问题,请将 Android 代码更改为使用,JsonObjectRequest而不是StringRequest,并将请求作为 传递JSONObject:JSONObject params = new JSONObject();params.put("subject",subject);params.put("class",qSet[qsetCntr][0]);params.put("user", thisuser);params.put("result", new JSONArray(resltn));params.put("qstn", new JSONArray(qstnn));params.put("qid", new JSONArray(qiddn));params.put("ans", new JSONArray(answn));params.put("lickey","jg2ler3xvbdgsjkru12tutujghgjgl4jkjojuir8uttzcdadasretf");reqPostanswers = new JsonObjectRequest(Request.Method.POST, urll, params,    new  Response.Listener<String>() { ... },    new Response.ErrorListener() { ... }});完成此更改后,您很可能还必须更改 PHP 代码,以便它从请求正文中读取 JSON。

人到中年有点甜

首先问题出在你创建的json上。Json 数组应如下所示,"qstn": ["607421_15958169393.JPG","410816_15958169444.JPG",&nbsp; &nbsp; &nbsp; "655502_15958169495.JPG","625421_15958179086.JPG","625421_15958179086.JPG",&nbsp;"461984_15958180457.JPG"]按照上面所示的方式转换你的 json 数组并在 php 端使用,$model = json_decode($json,true);现在您可以访问该变量的值,如下所示:&nbsp;$class = $model["class"];&nbsp;//The 0th index of qstn array can be accessed as&nbsp;$qsnt1 = $model["qstn"][0];为了避免将来出现此类错误,请使用gson为您创建 json。

不负相思意

使用ltrim和函数从字符串中rtrim删除 和[,然后使用explode可以将字符串转换为数组。]注意:此示例仅在分隔符为,空格 ( ", ")时有效例如"qstn":$array = json_decode($json, true);$resultArray = explode(", ",rtrim(ltrim($array["qstn"],"["),"]"));var_dump($resultArray);
打开App,查看更多内容
随时随地看视频慕课网APP