Я создаю запрос 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);