我在JSON响应之下,我需要检查response
字段是否具有空值。如果response
字段的值为空,那么我需要退出程序。
[
{
"results": {
"response": null,
"type": "ABC"
},
"error": null
}
]
检查这个问题最简单的方法是什么?我知道的一个选项是将JSON转换为POJO,然后检查响应字段。还有其他方法吗?
答案 0 :(得分:7)
如果你使用的是codehouse的JSON库,你可以这样做:
JSONObject jsonObj = new JSONObject(jsonString);
System.out.println(jsonObj .isNull("error") ? " error is null ":" error is not null" );
如果使用Google的gson:
JsonObject jsonObject = new JsonParser().parse(st).getAsJsonObject();
JsonElement el = jsonObject.get("error");
if (el != null && !el.isJsonNull()){
System.out.println (" not null");
}else{
System.out.println (" is null");
}
答案 1 :(得分:1)
我正在使用org.json.JSONObject。这是一个可用于测试JSONObject是否为null的示例。
包装一般;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
public class CheckNullInJSONObject {
public static void main(String[] args) {
JSONObject json = new JSONObject("{results : [{response:null}, {type:ABC}], error:null}");
JSONArray array = json.getJSONArray("results");
try {
for(int i = 0 ; i < array.length() ; i++){
JSONObject response = array.getJSONObject(i);
if (response.isNull("response")){
throw new Exception("Null value found");
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
正则表达式/解析字符串以获取响应字段值或使用google gson lib:https://github.com/google/gson创建对象并访问任何字段。
答案 3 :(得分:0)
可靠地检查null响应字段值的最安全方法是(如您所建议的)使用POJO类对json数据结构建模并使用json库,例如Gson或Jackson将你的json反序列化为你的POJO。
不要在这里听取其他答案,建议使用正则表达式。仅使用正则表达式构建正确可靠的json解析器是a)容易出错并且b)性能很差。
答案 4 :(得分:0)
取决于您的需求有两种方式:
快速脏方式,这可能实际上有用/足够好/性能良好:
String jsonString = ...
jsonString.contains("\"response\": null");
是的,如果服务器改变了任何内容,甚至是换行符等,那么它很容易出错。但是它将使用更少的资源。
具有更高容差的变体包括regexp,它只允许字段名称和值之间有零个或多个空格。另一种变体是找到字段的索引并在手动后查找值:
int fieldIndex = jsonString.indexOf("\"response\":");
//left as an exercise...
使用库进行Json解析,例如Gson(Google的json库):
简单的最小结果类:
public static class Result {
public static class Results {
public String response;
}
public Results results;
}
解析并检查(忽略数组的空值和长度检查):
Gson gson = new Gson();
Result[] results = gson.fromJson(jsonString, Result[].class);
System.out.println(results[0].results.response);
Gson可以在这里找到: https://github.com/google/gson