如何使用 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);

    }