Java &引用;org.json.JSONException:禁止的数值:NaN“;

Java &引用;org.json.JSONException:禁止的数值:NaN“;,java,android,json,Java,Android,Json,我在尝试从字符串创建JSONObject时遇到了一些问题 try { JSONObject jsonObjMain = new JSONObject(myjsonstring); final JSONArray jsonArray = jsonObjMain.getJSONArray("Waypoints"); AsyncTask.execute(() -> {

我在尝试从字符串创建JSONObject时遇到了一些问题

try {
                    JSONObject jsonObjMain = new JSONObject(myjsonstring);
                    final JSONArray jsonArray = jsonObjMain.getJSONArray("Waypoints");
                    AsyncTask.execute(() -> {
                        for (int i = 0; i < jsonArray.length(); i++) {

                            JSONObject jsonObj;
                            try {
                                jsonObj = jsonArray.getJSONObject(i);

                                latL.add(jsonObj.getDouble("Latitude"));
                                lonL.add(jsonObj.getDouble("Longitude"));
                                name.add(jsonObj.getString("Name"));

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

                    });


                } catch (JSONException e) {
                    e.printStackTrace();
                }
2018-12-28 14:06:32.396 30282-30408/com.virtualflight.virtuallink W/System.err:org.json.JSONException:禁止的数值:NaN 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:at org.json.json.checkDouble(json.java:25) 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:at org.json.JSONObject.put(JSONObject.java:265) 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:org.json.JSONTokener.readObject(JSONTokener.java:384) 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:org.json.JSONTokener.nextValue(JSONTokener.java:100) 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:org.json.JSONObject.(JSONObject.java:159) 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:org.json.JSONObject.(JSONObject.java:176) 2018-12-28 14:06:32.397 30282-30408/com.virtualflight.virtuallink W/System.err:at com.virtualflight.virtuallink.MainActivity$SendCommand.doInBackground(MainActivity.java:174) 2018-12-28 14:06:32.398 30282-30408/com.virtualflight.virtuallink W/System.err:at com.virtualflight.virtuallink.MainActivity$SendCommand.doInBackground(MainActivity.java:116) 2018-12-28 14:06:32.398 30282-30408/com.virtualflight.virtuallink W/System.err:at android.os.AsyncTask$2.call(AsyncTask.java:333) 2018-12-28 14:06:32.398 30282-30408/com.virtualflight.virtuallink W/System.err:at java.util.concurrent.FutureTask.run(FutureTask.java:266) 2018-12-28 14:06:32.398 30282-30408/com.virtualflight.virtuallink W/System.err:at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 2018-12-28 14:06:32.398 30282-30408/com.virtualflight.virtuallink W/System.err:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 2018-12-28 14:06:32.399 30282-30408/com.virtualflight.virtuallink W/System.err:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 2018-12-28 14:06:32.399 30282-30408/com.virtualflight.virtuallink W/System.err:at java.lang.Thread.run(Thread.java:764)

现在,我想我知道问题是什么,但我不知道如何解决它。本质上,我认为这是因为“ETAToDestination”和“ETAToNext”返回“NaN”值而不是整数或双精度值,因此字符串不能转换为JSONObject。在某些情况下,这两个值将包含一个数值,而不是NaN

也许有某种方法可以抑制特定代码行上的错误


提前谢谢你,我的问题内容的格式太草率了,对此表示歉意

因此,最简单的解决方案之一是用字符串替换NaN,而不管你想要什么

myjsonstring = myjsonstring.replaceAll("NaN", -1 /*Or whatever you need*/);

//Now you can do your work as it is
JSONObject jsonObjMain = new JSONObject(myjsonstring);

你从哪里获得json字符串?@FarhanQasim我从游戏中获得它API@dragospopa,这由你控制吗?为什么它返回
NaN
s,您能让它返回其他内容吗?如果您查看JSON.stringify部分,注意4,
NaN
对于JSON.stringify不是有效的结果,它必须是
null
。也不允许
NaN
值(更准确地说,这些值不能用十进制数字字符串表示)。@M.Prokhorov API不在我的控制范围内。感谢您的帮助,但是Kousik Mandal的答案很有效。这在很多情况下可能有效,但是如果JSON总是没有空格,那么可以将“:NaN”替换为“:-1”,这样会更安全。使用正则表达式,还可以处理带有空格的JSON。当回答一个旧问题时,如果您包含一些上下文来解释您的答案是如何帮助的,那么您的答案对其他StackOverflow用户会更有用,特别是对于一个已经有公认答案的问题。请参阅:。
myjsonstring = myjsonstring.replaceAll("NaN", -1 /*Or whatever you need*/);

//Now you can do your work as it is
JSONObject jsonObjMain = new JSONObject(myjsonstring);
double defaultValue = 0.0;

double myDouble = jsonObj.getDouble("Latitude");
latL.add(Double.isNaN(myDouble) ? defaultValue : myDouble);