json_decode返回nempty值php

时间:2016-01-07 10:06:26

标签: php android json

我从我的Android应用程序中获取包含用户注册数据的json字符串。 在服务器端,我使用php将其插入数据库。

这是我将获得的json字符串

{"user_name":"Steve Jobs","user_email":"steave@apple.com","user_password":"nopassword","user_phone_number":"1234567890","club_member_id":"24"}

但是当我将其转换为数组时,我将获得 null 值。

<?php

  //$_POST contains the json string. 
  $data = json_decode($_POST,true);


?>

$data将获得空字符串

我将如何解决它。

更新

file_get_contents('php://input')

的内容
  

POST =%7B%22user_name%22%3A%22Steve +作业%22%2C%22user_email%22%3A%22steave%40apple.com%22%2C%22user_password%22%3A%22nopassword%22%2C% 22user_phone_number%22%3A%221234567890%22%2C%22club_member_id%22%3A%2224%22%7

JAVA

private void onSignup() throws IOException {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);

//         Add your data

        try {
            jsonParams.put("user_name", "Steve Jobs");
            jsonParams.put("user_email", "steave@apple.com");
            jsonParams.put("user_password", "nopassword");
            jsonParams.put("user_phone_number", "1234567890");
            jsonParams.put("club_member_id", "24");
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("POST", jsonParams.toString()));
            Log.e("mainToPost", "mainToPost" + nameValuePairs.toString());
            // Use UrlEncodedFormEntity to send in proper format which we need
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);


        } catch (JSONException e) {

        }

        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        Log.e("Data", String.valueOf(json));
        try {

            // Getting JSON Array
            JSONArray user = json.getJSONArray("POST");
            Log.e("JSON ARRAY", String.valueOf(user));
            ArrayList<String> stringArray = new ArrayList<String>();
            for (int i = 0, count = user.length(); i < count; i++) {
                try {
                    JSONObject jsonObject = user.getJSONObject(i);
                    String name = jsonObject.getString(TAG_NAME);
                    stringArray.add(name);
                    Log.e("JSON ARRAY", String.valueOf(stringArray));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
//                name1.setText(String.valueOf(stringArray));
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

4 个答案:

答案 0 :(得分:2)

看到你编辑后,似乎你发送json作为一个键值对的一部分,只是一个奇怪的键名(POST)让事情变得混乱。

您应该可以通过以下方式获取数据:

$data = json_decode($_POST['POST'],true);

为清楚起见,将密钥名称更改为更合理的名称可能是有意义的:

nameValuePairs.add(new BasicNameValuePair("json", jsonParams.toString()));

然后您将通过以下方式访问:

$data = json_decode($_POST['json'],true);

或者替代地,只是将数据作为json发送,而不是键值对:

try {
        jsonParams.put("user_name", "Steve Jobs");
        jsonParams.put("user_email", "steave@apple.com");
        jsonParams.put("user_password", "nopassword");
        jsonParams.put("user_phone_number", "1234567890");
        jsonParams.put("club_member_id", "24");
        StringEntity params = new StringEntity(jsonParams.toString());
        httppost.addHeader("content-type", "application/json");
        httppost.setEntity(params);
        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    }

然后在我的原始答案中使用下面描述的php代码

原始回答:

$_POST是一个数组,当收到包含键值对(contentType application/x-www-form-urlencoded)的帖子请求时会自动填充。

如果发布json数据(contentType application/json),则不会填充$_POST,而是需要解析输入流:

$data = json_decode(file_get_contents('php://input'), true);

答案 1 :(得分:0)

您的json数据可能会在POST的某个数组索引中出现而不是在完整的全局数组中,您的代码应该是这样的

$data = json_decode($_POST['some_json_field'], true);

答案 2 :(得分:0)

试试这个:

$data = json_decode($_POST['string_name_in_which_json_string_is_present'],true);

答案 3 :(得分:0)

您无法使用$ _POST获取值。请尝试:

$data = json_decode(file_get_contents('php://input'), true);

这应该这样做。

如果请求正文不是标准的urlencoded格式,则不会填充

$ _ POST。