Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 投双到长,奇怪的例外_Java_Json_Casting - Fatal编程技术网

Java 投双到长,奇怪的例外

Java 投双到长,奇怪的例外,java,json,casting,Java,Json,Casting,我正在用org.JSON.simple解析一个JSON文件,我遇到了一个让我恼火的错误,我无法修复它。希望你能帮助我。 问题是,此代码出现以下异常java.lang.Double无法转换为java.lang.Long “奇怪”的是,如果我将“双变量”更改为“长变量”,会出现以下错误:java.lang.long不能转换为java.lang.double。 你能帮帮我吗 private double[] tminOWaux = new double[7]; private double[] tma

我正在用
org.JSON.simple
解析一个JSON文件,我遇到了一个让我恼火的错误,我无法修复它。希望你能帮助我。 问题是,此代码出现以下异常
java.lang.Double无法转换为java.lang.Long
“奇怪”的是,如果我将“双变量”更改为“长变量”,会出现以下错误:
java.lang.long不能转换为java.lang.double
。 你能帮帮我吗

private double[] tminOWaux = new double[7];
private double[] tmaxOWaux = new double[7];
private double[] humOWaux = new double[7];
private double[] windOWaux = new double[7];
public void filtraOW7days(String contenidoOW) throws ParseException{ 
    JSONParser parser = new JSONParser();
    try{
        Object obj = parser.parse(contenidoOW);
        JSONObject jsonList = (JSONObject) obj;
        JSONArray list = (JSONArray) jsonList.get("list");
        Iterator<String> unitsIterator = list.iterator();
        int i = 0;
        while(unitsIterator.hasNext()){
            Object uJson = unitsIterator.next();
            JSONObject uj = (JSONObject) uJson;
            this.humOWaux[i] =  (double) uj.get("humidity");
            this.windOWaux[i] = (double) uj.get("speed");

            JSONObject slideContent = (JSONObject) uj.get("temp");
            this.tmaxOWaux[i] = (double) slideContent.get("max");
            this.tminOWaux[i] = (double) slideContent.get("min");

            i++;
        }

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

}

谢谢你抽出时间

我想您的问题在于,您无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语


我会尝试使用
Double.longValue()
而不是直接强制转换。

我想您的问题在于无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语


我会尝试使用
Double.longValue()
而不是直接强制转换。

我想您的问题在于无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语


我会尝试使用
Double.longValue()
而不是直接强制转换。

我想您的问题在于无法将包装器直接从一种类型转换为另一种类型。正如您在中所看到的,这种转换只允许使用原语


我会尝试使用
Double.longValue()
而不是直接强制转换。

JSONObject实际上是一个
HashMap
,可能有不同类型的值

显然,对于
while
循环中的数组分配,对
get()
的4次调用可能会返回一个
Number
对象(一个
Long
或一个
Double
),在
Java
中不允许在这些类型之间进行强制转换

因此,需要一个简单的辅助函数,如

  private static long longValue(Object value) {
    return (value instanceof Number ? ((Number)value).longValue() : -1);
  }

  private static double doubleValue(Object value) {
    return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
  }
其中-1表示无效值(当然可以是任何其他值)。使用
instanceof
应该足够快,它还可以覆盖
null
值,从而避免
NullPointerException

如果要分配的所有数组值都是
long
,则后3个分配需要调用
longValue()
。如果所有数组值都是
double
,则对第一次赋值使用
doubleValue()
应该有效,即

this.humOWaux[i] = doubleValue(uj.get("humidity"));

但是,出于安全原因,最好在适用的情况下对所有赋值使用
longValue()
doubleValue()

JSONObject实际上是一个
HashMap
,可能具有不同类型的值

显然,对于
while
循环中的数组分配,对
get()
的4次调用可能会返回一个
Number
对象(一个
Long
或一个
Double
),在
Java
中不允许在这些类型之间进行强制转换

因此,需要一个简单的辅助函数,如

  private static long longValue(Object value) {
    return (value instanceof Number ? ((Number)value).longValue() : -1);
  }

  private static double doubleValue(Object value) {
    return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
  }
其中-1表示无效值(当然可以是任何其他值)。使用
instanceof
应该足够快,它还可以覆盖
null
值,从而避免
NullPointerException

如果要分配的所有数组值都是
long
,则后3个分配需要调用
longValue()
。如果所有数组值都是
double
,则对第一次赋值使用
doubleValue()
应该有效,即

this.humOWaux[i] = doubleValue(uj.get("humidity"));

但是,出于安全原因,最好在适用的情况下对所有赋值使用
longValue()
doubleValue()

JSONObject实际上是一个
HashMap
,可能具有不同类型的值

显然,对于
while
循环中的数组分配,对
get()
的4次调用可能会返回一个
Number
对象(一个
Long
或一个
Double
),在
Java
中不允许在这些类型之间进行强制转换

因此,需要一个简单的辅助函数,如

  private static long longValue(Object value) {
    return (value instanceof Number ? ((Number)value).longValue() : -1);
  }

  private static double doubleValue(Object value) {
    return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
  }
其中-1表示无效值(当然可以是任何其他值)。使用
instanceof
应该足够快,它还可以覆盖
null
值,从而避免
NullPointerException

如果要分配的所有数组值都是
long
,则后3个分配需要调用
longValue()
。如果所有数组值都是
double
,则对第一次赋值使用
doubleValue()
应该有效,即

this.humOWaux[i] = doubleValue(uj.get("humidity"));

但是,出于安全原因,最好在适用的情况下对所有赋值使用
longValue()
doubleValue()

JSONObject实际上是一个
HashMap
,可能具有不同类型的值

显然,对于
while
循环中的数组分配,对
get()
的4次调用可能会返回一个
Number
对象(一个
Long
或一个
Double
),在
Java
中不允许在这些类型之间进行强制转换

因此,需要一个简单的辅助函数,如

  private static long longValue(Object value) {
    return (value instanceof Number ? ((Number)value).longValue() : -1);
  }

  private static double doubleValue(Object value) {
    return (value instanceof Number ? ((Number)value).doubleValue() : -1.0);
  }
其中-1表示无效值(当然可以是任何其他值)。使用
instanceof
应该足够快,它还可以覆盖
null
值,从而避免
NullPointerException

如果要分配的所有数组值都是
long
,则后3个分配需要调用
longValue()
。如果所有数组值都是
double
,则对第一次赋值使用
doubleValue()
应该有效,即

this.humOWaux[i] = doubleValue(uj.get("humidity"));
但是,出于安全原因,最好对所有赋值使用
longValue()
doubleValue()
,如适用