如何使用 JSON 将此 PHP 解析为 Java?
How do I parse this PHP to Java using JSON?
我正在为此烦恼。我仍然不完全理解 JSON 是如何工作的。我正在尝试 return 一个数字(格式为字符串)从 PHP 脚本到 java。我不断收到以下错误:
Error parsing data org.json.JSONException: Value http of type java.lang.String cannot be converted to JSONArray
这是 PHP 代码的一个片段:
class result
{
public $value = "";
}
$result = new result();
$result->value = "1";
print(json_encode($result));
这个returns:
{"value":"1"}
我正在尝试将“1”存储在一个字符串中,以便在 android 端进行错误检查。
它首先插入 MySQL 数据库并且可以工作,但它不会 return 正确地输入值。
这是我一直在尝试使用的 java 代码:
try
{
CustomHttpClient.executeHttpPost(response="http://test.com/test.php",postParameters);
String result = response.toString();
try
{
returnString = "";
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++)
{
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","value:"+json_data.getString("value"));
returnString = json_data.getString("value");
}
}
catch(JSONException e)
{
Log.e("log_tag", "Error parsing data "+e.toString());
Toast.makeText(getApplicationContext(), "Error Parsing", Toast.LENGTH_LONG).show();
}
}
您的 PHP 代码 returns 一个 JSON 对象(包含在 {}
中),而不是数组(包含在 []
中)。因此,您需要将 JSON 解析代码更改为
returnString = "";
JSONObject json_data = new JSONObject(result);
Log.i("log_tag","value:"+json_data.getString("value"));
returnString = json_data.getString("value");
因为只有一个 JSON 对象被返回,所以也不需要循环。
首先,我建议您使用 Gson API,这是处理 JSON 对象的绝佳 API。我强烈建议您阅读他们网站上的指南。
这里的问题是您正在尝试将对象转换为数组,这就是您收到异常的原因。转换您上面指定的值的正确方法是:
JsonObject jObject = (JsonObject) new JsonParser().parse(value);
上面的示例使用的是 Gson API,但同样适用于您的 API。
你可以试试这个例子,这对我有用:
public String listOfUser() {
//User users = new User();
String URI = "http://localhost/Perumahan/index.php/User_c";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
List<LinkedHashMap> users = restTemplate.getForObject(URI, List.class);
//userService.addUser(users);
return gson.toJson(users);
}
我正在为此烦恼。我仍然不完全理解 JSON 是如何工作的。我正在尝试 return 一个数字(格式为字符串)从 PHP 脚本到 java。我不断收到以下错误:
Error parsing data org.json.JSONException: Value http of type java.lang.String cannot be converted to JSONArray
这是 PHP 代码的一个片段:
class result
{
public $value = "";
}
$result = new result();
$result->value = "1";
print(json_encode($result));
这个returns: {"value":"1"}
我正在尝试将“1”存储在一个字符串中,以便在 android 端进行错误检查。
它首先插入 MySQL 数据库并且可以工作,但它不会 return 正确地输入值。
这是我一直在尝试使用的 java 代码:
try
{
CustomHttpClient.executeHttpPost(response="http://test.com/test.php",postParameters);
String result = response.toString();
try
{
returnString = "";
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++)
{
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","value:"+json_data.getString("value"));
returnString = json_data.getString("value");
}
}
catch(JSONException e)
{
Log.e("log_tag", "Error parsing data "+e.toString());
Toast.makeText(getApplicationContext(), "Error Parsing", Toast.LENGTH_LONG).show();
}
}
您的 PHP 代码 returns 一个 JSON 对象(包含在 {}
中),而不是数组(包含在 []
中)。因此,您需要将 JSON 解析代码更改为
returnString = "";
JSONObject json_data = new JSONObject(result);
Log.i("log_tag","value:"+json_data.getString("value"));
returnString = json_data.getString("value");
因为只有一个 JSON 对象被返回,所以也不需要循环。
首先,我建议您使用 Gson API,这是处理 JSON 对象的绝佳 API。我强烈建议您阅读他们网站上的指南。
这里的问题是您正在尝试将对象转换为数组,这就是您收到异常的原因。转换您上面指定的值的正确方法是:
JsonObject jObject = (JsonObject) new JsonParser().parse(value);
上面的示例使用的是 Gson API,但同样适用于您的 API。
你可以试试这个例子,这对我有用:
public String listOfUser() {
//User users = new User();
String URI = "http://localhost/Perumahan/index.php/User_c";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
List<LinkedHashMap> users = restTemplate.getForObject(URI, List.class);
//userService.addUser(users);
return gson.toJson(users);
}