Разбор запроса JSON POST в PHP

Я создаю запрос HTMLPost, содержащий объект JSON в java, и хотел бы проанализировать его на PHP.

public static String transferJSON(JSONObject j) { HttpClient httpclient= new DefaultHttpClient(); HttpResponse response; HttpPost httppost= new HttpPost(SERVERURL); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("json", j.toString())); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); response = httpclient.execute(httppost); } 

И на сервере

 <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // input = "json=%7B%22locations%22%3A%5B%7B%22..." $input = file_get_contents('php://input'); // jsonObj is empty, not working $jsonObj = json_decode($input, true); 

Я предполагаю, что это связано с тем, что специальные символы JSON кодируются.

Json_decode возвращает пустой ответ

Любая идея почему?

Вместо POSTing объекта application/json вы фактически отправляете объект формы HTTP ( application/x-www-form-urlencoded ) с одной парой значений json = (закодированный json).

вместо

 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("json", j.toString())); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

Пытаться

  httppost.setEntity(new StringEntity(j.toString(),"application/json","UTF-8")); 

Это по дизайну: вы получаете доступ к необработанным данным POST, которые должны быть скопированы URL.

urldecode() используйте urldecode() для данных.

Попробуй это:

 //remove json= $input = substr($input, 5); //decode the url encoding $input = urldecode($input); $jsonObj = json_decode($input, true);