java - 从 JSONObject 转换非原始 Double

标签 java json casting double

我有一个数据库和一个表,其中有两个双列:

  • 经度
  • 纬度

由于我正在使用的一些内部逻辑,这些列允许为空。 我从数据库接收 JSON 形式的数据。

发生地点:

当这些列中存在 null 时,我会遇到问题。

导致错误的代码 -

双经度 = myJSONObject.getDouble("经度");

以及它引起的错误 -

org.json.JSONObject$1 类型经度处的值 null 无法转换为 double

我尝试过的:

我使用了 Double 而不是 double,所以我查看了 java 代码,发现 JSONObject.getDouble() 返回一个原始的 double,并且没有其他合适的方法返回 Double

所以我尝试使用 JSONObject.get() 返回一个 Object,然后将其转换为 Double -

双经度 = (Double)myJSONObject.get("经度 ");

但这引发了以下错误 -

无法将“org.json.JSONObject$1”转换为“java.lang.Double”

我发现Object无法转换为Double

可能的解决方案:

我认为可行的唯一方法是将值作为String获取并解析它,但这似乎效率低下。有没有更好的方法从 JSON 对象接收非原始 Double

一如既往,我感谢您提供的任何帮助。 (如果有不清楚的地方 - 请通知我,我会尽力更加连贯。我正在努力在该领域进行改进。)

编辑:请求的信息

生成 JSON:Android

private class GetAllEvents extends AsyncTask<Void, Void, JSONArray> {
    @Override
    protected JSONArray doInBackground(Void... params) {
        try
        {
            URL myUrl = new URL("http://xx.xx.xxx.xxx/GetAllEvents.php");
            HttpURLConnection request = (HttpURLConnection)myUrl.openConnection();
            request.setChunkedStreamingMode(0); //Probably default, just in case

            if (request.getResponseCode() != 200) //If request reached errors
                return null;

            InputStream stream = request.getInputStream();
            String jsonStr = convertStreamToString(stream);
            if (jsonStr.equals("[]")) //Empty array
                return null;
            return new JSONArray(jsonStr);
        }
        catch (Exception e)
        {
            Log.w("myApp", e.toString());
        }
        return null;
    }
}

生成 JSON:PHP(在远程服务器上)

<?require_once('MysqliDb.php');
$db = new MysqliDb();
//All closest events by date
$All = $db->query("SELECT * FROM Events;");
//Return in JSON
echo json_encode($All);

这会生成一个 JSONArray,我在 for 循环中从中提取 JSONObject。

JSON 结果示例: [{"ModifiedOn":"2015-03-30 14:28:21", "名称":"以色列", "描述":"以色列", "电话":"0500000000", "类型": 0、“地址”:“阿拉伯联合酋长国”、“密码”:“123456”、“ID”:1、“纬度”:空、“组织者”:“阿拉伯联合酋长国”、“经度”:空、“城市”:“Tzur”伊格尔"}]

(请忽略希伯来语)

从这里开始:

for (int i = 0; i < eventsArray.length(); i++) {
    JSONObject myJSONObject = myJSONArray.getJSONObject(i);
    --- *Do other things* ---
    Double Longitude = (Double)myJSONObject.get("Longitude");
    Double Latitude = (Double)myJSONObject.get("Latitude");
}

我希望这更清楚。

最佳答案

致谢@mkrakhin。 效果非常好。

Double longitude = myJSONObject.isNull("Longtitude") ? null : myJSONObject.getDouble("Longtitude");

关于java - 从 JSONObject 转换非原始 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29433933/

相关文章:

java - 如何使用java检查查询是否为空

java - 无法从 START_OBJECT 标记 String.class 反序列化 java.lang.String 的实例

c - 使用函数来减少重复性

scala - 在 scala 中将 Int 添加到字符串

java - SLF4J : Class path contains multiple SLF4J bindings - Eclipse

java - 如何在Opengl ES中获得一个像素的透明颜色?

java - JTable 显示值错误/不显示完整值

c# - 如何在 C# 中将包含数组的字符串转换为数组

javascript - 使用 jQuery 按值删除 JSON 数组中的元素

java - 为什么从堆栈到 int 的转换没有在 Java 中运行?