![](/img/trans.png)
[英]How do I convert a JsonArray of JsonString to a List of String
[英]JSONArray(jsonstring) drops decimal if 0
我有一個帶有浮動值的json字符串: {"foo":10.0,"bar":12.005}
我需要使用JSONObject(jsonstring)
對其進行轉換,並且需要保留小數,但是如果它們為零,則json數組會刪除它們。 結果看起來像{"foo":10,"bar":12.005}
我希望我可以提供其他參數來控制數據類型,但是根據https://developer.android.com/reference/org/json/JSONObject ,沒有這樣的選項。 我也搜索了谷歌和stackoverflow,但我找不到任何類似的問題。
JSONObject始終將所有內容都視為Object,因此必須通過解析將其轉換為float。
String json = "{\"foo\":10.0}";
try{
JSONObject jo = new JSONObject(json);
float f = Float.parseFloat(jo.get("foo").toString());
System.out.println(f);
}
catch(Exception e){
// Some parsing exception occurs
}
希望這能解決問題。
JSONObject還支持用於獲取各種數據類型(例如double,int,boolean)的項目的方法
double d = jo.getDouble("foo");
System.out.println(d); // gave me 10.0
同樣,我們有
int i = getInt("name"); // which returns an integer
boolean b = getBoolean("name"); // Automatically parses
無法從JSON.parse或eval獲取位數。 即使EcmaScript委員會采用了IBM的十進制提議,該數字仍將解析為IEEE 754浮點數。
看一下http://code.google.com/p/json-sans-eval/source/browse/trunk/src/json_sans_eval.js ,以獲取可以修改以保留精度信息的簡單JSON解析器。
這里已經提供了解決方案
這是預期的行為。
DECIMAL字段將轉換為JSON NUMBER數據類型。 此類型默認情況下修剪尾隨零。
JSON的客戶端/接收者可以決定需要顯示多少小數位並設置正確的顯示格式。
對於10.0,它將在JSON中將值添加為整數,如果要使用十進制,則首先需要將其轉換為字符串,然后需要將字符串值放入JSON。
val foo = 10.0
val bar = 12.005
val strFoo = foo.toString();
val jsonObject = JSONObject()
jsonObject.put("foo",strFoo)
jsonObject.put("bar", bar)
我想這不是JSON數組的問題,而是語言從float到int的類型轉換。
使用類似的方法將float格式化為字符串String.format("%,.2f", val);
編輯
工作流程如下:
if(Math.ceil(val)==val){ //a number with no fractional points
String str = String.format("%,.2f", val);
}
else //use_the_floating_number_as_usual
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.