如何在JSON中检查null的字段?

时间:2016-03-25 20:07:50

标签: java json

我在JSON响应之下,我需要检查response字段是否具有空值。如果response字段的值为空,那么我需要退出程序。

[
    {
        "results": {
            "response": null,
            "type": "ABC"
        },
        "error": null
    }
]

检查这个问题最简单的方法是什么?我知道的一个选项是将JSON转换为POJO,然后检查响应字段。还有其他方法吗?

5 个答案:

答案 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库,例如GsonJackson将你的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