我需要将一些数值放入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;进入数据结构。
所以我需要有相同类型的数字数据。
答案 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;
}
你可以选择一个不同的。