簡體   English   中英

JSONArray(jsonstring)如果為0則舍去小數

[英]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解析器。

這里已經提供了解決方案

解析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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM