我从我的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();
}
}
答案 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。