How to send json from android to php?

To send json from android to php, I used the Volley library StringRequest .

 StringRequest sr = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() { @Override public void onResponse(String response) { // some code } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //some code } }){ @Override protected Map<String,String> getParams(){ Map<String, String> params = new HashMap<String, String>(); ArrayList<Command> commands = MyApplication.readFromPreferences(getActivity(), Constants.COMMAND); String jsonCommands = new Gson().toJson(commands); params.put("commands", jsonCommands); return params; } }; 

And in order to catch the data in php and check if it was sent correctly, I used this

 echo $_POST["commands"]; 

Conclusion:

 [{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"CF77 COIN FINDER\",\"url_image\":\"IMG_76ECDC-707E7E-70AC81-0A1248-4675F3-F0F783.jpg\",\"name\":\"CF77 COIN FINDER\",\"pid\":12,\"price\":500.0},\"product_quantity\":3},{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"JEOSONAR 3D DUAL SYSTEM\",\"url_image\":\"IMG_2D9DF0-2EB7E9-ED26C0-2C833B-B6A5C5-5C7C02.jpg\",\"name\":\"JEOSONAR 3D DUAL SYSTEM\",\"pid\":15,\"price\":500.0},\"product_quantity\":1},{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"MAKRO POINTER\",\"url_image\":\"IMG_Macro.jpg\",\"name\":\"MAKRO POINTER\",\"pid\":18,\"price\":500.0},\"product_quantity\":3}] 

I noticed that when sending a json string with the POST method using the Volley library, a lot of anti-slash was added to avoid double quotes.

So here is my problem:

I want to decode json for an array of objects in php, so I used

 $commands = json_decode( $_POST["commands"],true); 

But it always returns an empty array due to invalide above json (caused by anti-slash).

Is there a way in php or in the java SDK that provides a contract to send and receive json without any problems? Or should I reformat json to php and remove all anti-slashes?

+5
source share
4 answers

Finally, I solved the problem using my own json_decode method to clear the json string before decrypting it.

 function json_clean_decode($json, $assoc = false, $depth = 512, $options = 0) { // search and remove comments like /* */ and // $json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json); // search and remove all backslashes $json = str_replace("\\","", $json); if(version_compare(phpversion(), '5.4.0', '>=')) { $json = json_decode($json, $assoc, $depth, $options); } elseif(version_compare(phpversion(), '5.3.0', '>=')) { $json = json_decode($json, $assoc, $depth); } else { $json = json_decode($json, $assoc); } return $json; } 
0
source

The problem is that you are trying to send json data to URL parameters.

You need to override the getBody() method to return json data as the request body and not as URL parameters.

For instance:

 /** * Returns the raw POST or PUT body to be sent. * * @throws AuthFailureError in the event of auth failure */ public byte[] getBody() throws AuthFailureError { return new Gson().toJson(commands).getBytes(); } 

And then in PHP you can:

$jsonRequest = json_decode(stream_get_contents(STDIN));

+2
source

first, the problem arises that json itself is not correctly built correctly, JSONObject for this, for example:

 JSONObject js = new JSONObject(); try { js.put("value",10); } catch (JSONException e) { e.printStackTrace(); } String jss = js.toString(); 

you can check if the parsing is successful, copy the line and copy it to the online parser, like this http://json.parser.online.fr/

+1
source

You can use this method to send json to a web service.

 public String makeServiceCallSubmit(String url, int method, JSONArray object) { try { // http client DefaultHttpClient httpClient = new DefaultHttpClient(); HttpEntity httpEntity = null; HttpResponse httpResponse = null; // Checking http request method type if (method == POST) { HttpPost httpPost = new HttpPost(url); httpPost.setHeader("Content-type", "application/json"); StringEntity se = new StringEntity(object.toString()); // se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); httpPost.setEntity(se); httpResponse = httpClient.execute(httpPost); } httpEntity = httpResponse.getEntity(); Response = EntityUtils.toString(httpEntity); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return Response; } 
-1
source

All Articles