如何在Scala中正确地输入数字?

时间:2017-10-31 13:13:37

标签: json scala

我需要将一些数值放入JSON数组中。但每次我使用obj.put(" key",value)时,该值都会自动生成#34;进入整数。

value = 0.0 => {" key":0}

我希望JSON对象中的值与我从应用程序获得的值完全相同。

我想使用value.getClass来获取类的值并创建一个match ... case方法并使用value.toString.to *,其中*是相应的类(即类是Integer,该值将使用value.toString.toInt进行转换。但这种做法有点肮脏"在我看来,我是斯卡拉的新手,所以我不太了解这种语言及其技巧。

有什么建议吗?

编辑:这是代码(这里我将JSON发送到服务器):

for ((p, v) <- exportMap){
        val obj: JSONObject = new JSONObject()
        obj.put("path", parsePathString(p.toString))
        if (v.toString.equals("Infinity")) {
            obj.put("result", "Inf")
        } else {
            obj.put("result", v)
        }
        exportJSONArray.put(obj)

在这里,我从服务器获取JSON,以便在应用程序中使用其数据:

var result: Any = jSONObject.get("result")
        if (result.equals("Inf")) {
            result = Double.PositiveInfinity
        }

然后变量&#34;结果&#34;进入数据结构。

所以我需要有相同类型的数字数据。

2 个答案:

答案 0 :(得分:0)

  

所以我需要有完全相同类型的数字数据

首先,您希望完全相同类型,但类型为val result: Double = jSONObject.optDouble("result", Double.PositiveInfinity) 。这就像说你不关心这种类型。您可以使用optDouble getter:

var

(并且它不一定是obj.put("result", if(v.isInfinity) "Inf" else v) ,尽量不要在Scala中使用vars)

接下来,在您写入对象的部分中,您可以检查该值是否为无穷大:

{{1}}

我认为这可以解决您的问题。

答案 1 :(得分:0)

Java(和Scala)中有很多JSON库,你选择了一个intentionally does this

public static String numberToString(Number number) throws JSONException {
    if (number == null) {
        throw new JSONException("Null pointer");
    }
    testValidity(number);

    // Shave off trailing zeros and decimal point, if possible.

    String string = number.toString();
    if (string.indexOf('.') > 0 && string.indexOf('e') < 0
            && string.indexOf('E') < 0) {
        while (string.endsWith("0")) {
            string = string.substring(0, string.length() - 1);
        }
        if (string.endsWith(".")) {
            string = string.substring(0, string.length() - 1);
        }
    }
    return string;
}

你可以选择一个不同的。