2

我有一个像下面这样的json。如何在 android.json 中找出 JSON 对象返回 JSON 数组或字符串。

{
    "green_spots": [
    ......
    ],
    "yellow_spots": "No yellow spot available",
    "red_spots": "No red spot available"
}

当值存在时,JSON 对象返回数组,否则返回一个字符串,如“没有可用的绿色/红色/黄色点”。我用以下方式完成了。但是还有其他方法吗? 因为警报字符串已更改,如果将不起作用。

JSONObject obj = new JSONObject(response);
String green = obj.getString("green_spots");

// Green spots
if ("No green spot available".equalsIgnoreCase(green)) {
    Log.v("search by hour", "No green spot available");
} else {
    JSONArray greenArray = obj.getJSONArray("green_spots");
            ....
      }
4

5 回答 5

10
    Object object = jsonObject.get("key");
    if (object instanceof JSONObject) {
    // It is json object
    } else if (object instanceof JSONArray) {
    // It is Json Array
    } else {
    // It is a String
    }
于 2013-10-07T11:35:21.890 回答
1

您可以使用 instanceof

而不是 getString 只做 obj.get 它将返回一个对象,检查对象是 instanceof String 还是 JSONArray

编辑:

这是一些示例代码:

Object itineraries = planObject.get("itineraries");
if (itineraries instanceof JSONObject) {
    JSONObject itinerary = (JSONObject) itineraries;
    // right now, itinerary is your single item
}
else {
    JSONArray array = (JSONArray) itineraries;
    // do whatever you want with the array of itineraries
}
于 2013-10-07T11:31:28.993 回答
0
JSONObject obj = new JSONObject(response);
JSONArray greenArray = obj.getJSONArray("green_spots");
if(greenArray!=null){
     do your work with greenArray here
}else{
    Log.v("search by hour", "No green spot available");
}
于 2013-10-07T11:30:48.090 回答
0

简单的打印像 Log.e("TAG","See>>"JsonObject.toString); 这样的对象 如果响应在 {} 块中,那么它是对象,如果它在 [] 它的数组中

于 2013-10-07T11:51:23.420 回答
0

警告:此信息可能是多余的,但它可能被证明是解决此问题的替代方法。

您可以使用Jackson Object Mapper将 JSON 文件转换为 HashMap。

public static HashMap<String, Object> jsonToHashMap(
            String jsonString) {

        Map<String, Object> map = new HashMap<String, Object>();
        ObjectMapper mapper = new ObjectMapper();

        try {

            // convert JSON string to Map
            map = mapper.readValue(jsonString,
                    new TypeReference<HashMap<String, Object>>() {
                    });


        } catch (Exception e) {
            e.printStackTrace();
        }
        return (HashMap<String, Object>) map;
    }

这会自动创建适当对象的 HashMap。然后,您可以使用 instanceof 或找出另一种方式来根据需要/需要使用这些对象。

于 2013-10-07T11:58:01.447 回答