空的Mysql字段(NULL)最终在Java中成为字符串“null”

时间:2014-11-13 13:02:44

标签: java php json

我从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

我不明白什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}返回的对象上执行toString()。它实际上是JSONObject.NULL

的静态实例
jsonObject.get("alt_names")

来自javadoc:

  

拥有NULL对象有时比使用Java的null值更方便,更不明确。 JSONObject.NULL.equals(null)返回true。 JSONObject.NULL.toString()返回“null”。