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

使用java/android发送的数据在php中进行JSON迭代,java,php,android,json,Java,Php,Android,Json,我的android PHP服务器正在接收以下json: { "class":"SURESHOT", "subject":"Maths", "qstn":"[607421_15958169393.JPG, 410816_15958169444.JPG, 655502_15958169495.JPG, 625421_15958179086.JPG,

我的android PHP服务器正在接收以下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\u编码(($\u 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);
reqPostanswers=new-StringRequest(Request.Method.POST、urll、new-Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
//Log.i(“posting info:,response.toString());
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//Log.i(“发布错误:,error.toString());
}
}){
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“主体”,主体);
参数put(“类”,qSet[qsetCntr][0]);
参数put(“用户”,thisuser);
参数put(“result”,resltn.toString());
参数put(“qstn”,qstnn.toString());
参数put(“qid”,qiddn.toString());
参数put(“ans”,answn.toString());
参数put(“利基”、“jg2ler3xvbdgsjkru12tutujghgjgl4jkjojuir8uttzcdadasretf”);
返回参数;
}
};
answerpostQueue=Volley.newRequestQueue(getApplicationContext());
添加(reqPostanswers);

PRAM设置中的数组或变量仅为ArrayList。

使用
ltrim
rtrim
函数从字符串中删除
[
]
,然后使用explode可以将字符串转换为数组。 注意:此示例仅在分隔符为
和空格(
,“
)时有效

带有
“qstn”
的示例:


使用
ltrim
rtrim
函数从字符串中删除
[
]
,然后使用explode可以将字符串转换为数组。 注意:此示例仅在分隔符为
和空格(
,“
)时有效

带有
“qstn”
的示例:


首先,问题在于您创建的json。Json数组应该如下所示

"qstn": ["607421_15958169393.JPG","410816_15958169444.JPG",
      "655502_15958169495.JPG","625421_15958179086.JPG","625421_15958179086.JPG", 
"461984_15958180457.JPG"]
以上面所示的方式转换json数组,并在php端使用

$model = json_decode($json,true);
现在,您可以访问此变量的值,如下所示:

 $class = $model["class"];
 //The 0th index of qstn array can be accessed as
 $qsnt1 = $model["qstn"][0];

为了避免将来出现此类错误,请使用创建json。首先,问题在于创建的json。Json数组应该如下所示

"qstn": ["607421_15958169393.JPG","410816_15958169444.JPG",
      "655502_15958169495.JPG","625421_15958179086.JPG","625421_15958179086.JPG", 
"461984_15958180457.JPG"]
以上面所示的方式转换json数组,并在php端使用

$model = json_decode($json,true);
现在,您可以访问此变量的值,如下所示:

 $class = $model["class"];
 //The 0th index of qstn array can be accessed as
 $qsnt1 = $model["qstn"][0];

为了避免将来出现此类错误,请使用创建json。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() { ... }
});
JSONObject params=new JSONObject();
参数put(“主体”,主体);
参数put(“类”,qSet[qsetCntr][0]);
参数put(“用户”,thisuser);
参数put(“结果”,新JSONArray(resltn));
参数put(“qstn”,新JSONArray(qstnn));
参数put(“qid”,新JSONArray(qiddn));
参数put(“ans”,新JSONArray(answn));
参数put(“利基”、“jg2ler3xvbdgsjkru12tutujghgjgl4jkjojuir8uttzcdadasretf”);
reqPostanswers=新的JsonObjectRequest(Request.Method.POST、urll、params、,
新响应。侦听器(){…},
新响应。ErrorListener(){…}
});

完成此更改后,很可能还需要更改PHP代码,以便它从请求体读取JSON。这里举例说明了如何做到这一点:

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() { ... }
});
JSONObject params=new JSONObject();
参数put(“主体”,主体);
参数put(“类”,qSet[qsetCntr][0]);
参数put(“用户”,thisuser);
参数put(“结果”,新JSONArray(resltn));
参数put(“qstn”,新JSONArray(qstnn));
参数put(“qid”,新JSONArray(qiddn));
参数put(“ans”,新JSONArray(answn));
参数put(“利基”、“jg2ler3xvbdgsjkru12tutujghgjgl4jkjojuir8uttzcdadasretf”);
reqPostanswers=新的JsonObjectRequest(Request.Method.POST、urll、params、,
新响应。侦听器(){…},
新响应。ErrorListener(){…}
});

完成此更改后,很可能还需要更改PHP代码,以便它从请求体读取JSON。例如,这里解释了如何做:

你能展示创建这个问题JSON的代码吗?@Joni,我添加了代码。你能展示创建这个问题JSON的代码吗?@Joni,我添加了代码。谢谢。但是,从java数组创建复杂JSON的最佳方法是什么?我没有重新定义,您指的是从java数组创建复杂JSON吗?我的问题不是限定的。对不起,谢谢。但是,从java数组创建复杂JSON的最佳方法是什么?我没有重新定义,您指的是从java数组创建复杂JSON吗?我的问题不是限定的。对不起,是你干的。谢谢这是一个很大的帮助。但整个问题还没有解决,这是我成功使用的php部分$json=文件获取内容('php://input'); $decoded=json_decode($json,true);所以$decoded是一个合格的php数组。谢谢这是一个很大的帮助。但整个问题还没有解决。这是