我从MySQL数据库中提取了一些数据,其中某些字段是 NULL 。不小心作为字符串,但正确存储为 NULL 。当我将这些空数据JSON编码发送到我的Android应用程序时,它们最终成为一个字符串" null"长度为4.所以我重建了这个问题,浓缩为基本代码:
PHP:
$string = null;
echo $array[0]['alt_names'] = $string;
echo json_encode($array);
Java :(我的PHP类返回一个字符串,在本例中为jsonResult
)
Log.i("Tag", "result = " + jsonResult); // result = [{"alt_names":null}]
JSONArray jsonArray = new JSONArray(jsonResult);
Log.i("Tag", "jsonArray = " + jsonArray); // jsonArray = [{"alt_names":null}]
JSONObject jsonObject = new JSONObject(jsonArray.getJSONObject(0).toString());
Log.i("Tag", "jsonobject = " + jsonObject); // jsonobject = {"alt_names":null}
String test = jsonObject.get("alt_names").toString();
Log.i("Tag", "test: " + test); // test: null
Log.i("Tag", "test.length(): " + test.length()); // test.length(): 4
在Log-output中包含null
的缺少的引号(不是)告诉我,这不是字符串" null"实际上是null
。不过字符串的长度是4,这是真的:
if (test.equals("null")) {Log.i("Tag", "true");} // true
我不明白什么?提前谢谢!
答案 0 :(得分:0)
请勿在{{1}}返回的对象上执行toString()
。它实际上是JSONObject.NULL
jsonObject.get("alt_names")
来自javadoc:
拥有NULL对象有时比使用Java的null值更方便,更不明确。 JSONObject.NULL.equals(null)返回true。 JSONObject.NULL.toString()返回“null”。