Gson.toJsonTree(intValue) 尝试传递整数参数值时抛出空指针异常
Gson.toJsonTree(intValue) throws Null pointer exception when trying to pass Integer parameter value
我们正在使用 Rest Assured 自动化 rest API。在此过程中,尝试创建一个可重用的方法来传递具有不同值的不同 JSON 节点。
已创建整数变量:
Integer amt = 50;
创建的方法:
public void replaceValues_gson(String mainNode, String childNode, Integer amt) {
if(amt != null){
jsonObjectNew.getAsJsonObject("mainNode").add("childNode", gson.toJsonTree(amt));
}
//here 'amt' throws an error as java.lang.NullPointerException; Also the amt it shows as 9 assigned to variable amt in the debugger where as it supposed to assign 50 value
}
调用上面的方法为:
replaceValues_gson("bInfo", "bEx", amt );
请求 JSON 上面的负载是:
{
"bInfo":{
"bEx":9,
"oriDate":"2020-07-08"
}
}
正在为 'amt' 变量和请求获取 NullPointerException JSON 负载值,而不是分配整数值 50。
如果直接像下面这样尝试就可以了:
jsonObjectNew.getAsJsonObject("bInfo").add("bEx", gson.toJsonTree(amt));
此处 amt 变量值正确为 50,但当尝试创建可重用方法时会抛出错误。
请指导。
您可以使用以下方法。但不支持需要更新的值在json数组中。
public void replaceValues_gson(JsonObject jsonObjectNew, String[] keyArray, Object updatingValue) {
Gson gson = new Gson();
JsonObject jsonObject = jsonObjectNew;
for (int i = 0; i < keyArray.length - 1; i++) {
jsonObject = jsonObject.getAsJsonObject(keyArray[i]);
}
jsonObject.add(keyArray[keyArray.length - 1], gson.toJsonTree(updatingValue));
System.out.println(jsonObjectNew.toString());
}
这里;
jsonObjectNew
- 从初始 json 请求转换而来的 JsonObject。
keyArray
- 来自根的 json 个节点名称的字符串数组(按确切顺序),包括需要更新的键
updatingValue
- 将更新的值
例如:-
String[] keyArray = {"bInfo", "bEx"};
replaceValues_gson(jsonObjectNew, keyArray, 50);
我们正在使用 Rest Assured 自动化 rest API。在此过程中,尝试创建一个可重用的方法来传递具有不同值的不同 JSON 节点。
已创建整数变量:
Integer amt = 50;
创建的方法:
public void replaceValues_gson(String mainNode, String childNode, Integer amt) {
if(amt != null){
jsonObjectNew.getAsJsonObject("mainNode").add("childNode", gson.toJsonTree(amt));
}
//here 'amt' throws an error as java.lang.NullPointerException; Also the amt it shows as 9 assigned to variable amt in the debugger where as it supposed to assign 50 value
}
调用上面的方法为:
replaceValues_gson("bInfo", "bEx", amt );
请求 JSON 上面的负载是:
{
"bInfo":{
"bEx":9,
"oriDate":"2020-07-08"
}
}
正在为 'amt' 变量和请求获取 NullPointerException JSON 负载值,而不是分配整数值 50。
如果直接像下面这样尝试就可以了:
jsonObjectNew.getAsJsonObject("bInfo").add("bEx", gson.toJsonTree(amt));
此处 amt 变量值正确为 50,但当尝试创建可重用方法时会抛出错误。
请指导。
您可以使用以下方法。但不支持需要更新的值在json数组中。
public void replaceValues_gson(JsonObject jsonObjectNew, String[] keyArray, Object updatingValue) {
Gson gson = new Gson();
JsonObject jsonObject = jsonObjectNew;
for (int i = 0; i < keyArray.length - 1; i++) {
jsonObject = jsonObject.getAsJsonObject(keyArray[i]);
}
jsonObject.add(keyArray[keyArray.length - 1], gson.toJsonTree(updatingValue));
System.out.println(jsonObjectNew.toString());
}
这里;
jsonObjectNew
- 从初始 json 请求转换而来的 JsonObject。
keyArray
- 来自根的 json 个节点名称的字符串数组(按确切顺序),包括需要更新的键
updatingValue
- 将更新的值
例如:-
String[] keyArray = {"bInfo", "bEx"};
replaceValues_gson(jsonObjectNew, keyArray, 50);