2017-09-22 5 views
0

JSONファイルに浮動値を持つ変数を指定する必要があります。しかし浮動小数点値は認識されません(例:20.4444f、0.5fなど)。だから私はJSONの変数に浮動小数点値を代入するために何が代わるのだろうと思っていましたか?jsonデータでfloatを指定する代替手段は何ですか?

また、JSONファイルを使用して、javaで数値パラメータ(string型、float型、double型)を多数設定します。

  1. 数値データをさらに処理する必要がある場合に適切なJava JSON APIはどちらですか?あなたの意見を本当に感謝します。

  2. 私が知る限り、Json Java APIはjsonファイルからの浮動値の読み取りをサポートしていません。それは正しい?

  3. 値をdoubleとして指定し、Doubleとして読み込んだ後、実際に使用する前に浮動小数点数に変換して考えることができます。しかし、浮動小数点への二重変換は、私のjsonファイルで指定した(浮動小数点としての)正確な値を私に与えることができないのではないかと恐れています。あなたの入力をしてください!

+0

「認識できません」を定義します。私にXYの問題のように聞こえる。 – EJP

+0

@EJP明確にするために、私はJsonが浮動小数点を別の方法で扱わないので、私のjsonファイルに20.4444fを書くことができません。 – Ragini

+0

'書き込みできません'を定義します。あなたが何を求めているのか不明です。 – EJP

答えて

0

ジャバスクリプトに存在するデータの種類を確認します。

https://www.tutorialspoint.com/json/json_data_types.htm

それがint、floatまたはdoubleのかどうか、これらの全てがの同じカテゴリーに入ります。たとえば 、あなたはJSON文字列にdoubleの配列を変換する場合:

{ "ダブル":[1,2,3]}

public class JsonPrimitiveArrays {   
public static void main(String[] args) { 
    JSONObject jsonObject = new JSONObject(); 
    double[] d = new double[]{1.0,2.0,3.0}; 
    jsonObject.put("doubles",d); 
    System.out.println(jsonObject);    
}   
} 

これは単に出力を与えるであろう

すべての数字はJavascriptの浮動小数点数です。したがって、1.0と1はJSで同じです。 int、float、doubleの区別はありません。

JSONはJSオブジェクトとして終了するため、 '1'は浮動小数点も表すため、余分な '.0'を追加する用途はありません。私はこれが渡される文字列のいくつかのバイトを保存するために行われると思います。

したがって、JSで浮動小数点数を取得し、それをJavaに戻して解析すると2倍になります。それを試してみてください。

1.Write DTOクラス:

package com.multithreading.concurrency; 

public class Identidade { 

    private int numero; 
    private int numeroFinal; 
    private float id; 

    public Identidade(int numero, int numeroFinal, float id) { 
    this.numero = numero; 
    this.numeroFinal = numeroFinal; 
    this.id = id; 
    } 

    // getters and setters 
} 

2もう一つの例を追加

。、今

public class ParentIdentidade { 

@JsonProperty("Identidade") 
private List<Identidade> identidade; 
// getters and setters 
} 

コードの下を介してそれをテスト:次に、上記DTOの参照を含むことになる親豆を、書き込み

{:あなたのような出力を見ることができる

public class TestIdentidade { 

public static void main(String[] args) {   

    List<Identidade> idenList = new ArrayList<Identidade>(); 
    idenList.add(new Identidade(1704, 1804, 28.0f)); 
    idenList.add(new Identidade(1806, 1905, 28.3f)); 
    idenList.add(new Identidade(1705, 1706, 29f)); 
    idenList.add(new Identidade(1707, 1807, 30.38f)); 

    ParentIdentidade parentIden = new ParentIdentidade(); 
    parentIden.setIdentidade(idenList); 

    ObjectMapper mapper = new ObjectMapper(); 
    try { 

     String json = mapper.writeValueAsString(parentIden); 
     System.out.println(json); 
    } catch (JsonProcessingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
} 

"numeroFinal":1905、 "id":28.3}、{numeroFinal ":1804、" id ":28.0}、{" numero ":1806、" numeroFinal " 1705、 "numeroFinal":1706、 "id":29.0}、{"numero":1707、 "numeroFinal":1807、 "id":30.38}]}

+0

変数に値20.4444fを代入したいのであれば、20.4444と書くだけでjson APIを介してその値を読み取ることができます.20.4444が得られます。それはあなたが言っているのですか? – Ragini

+0

はい、正しくなっています。 – Punit

+0

しかし、私のプログラムでそれをさらに使用できるようにするには、私は浮動小数点値を持っていなければなりません。私はちょうど私が最後に間違った結果を得るために私が正確に必要とするfloatの値を得られないかもしれません!(質問3のポイント3で指定されているように) – Ragini

1

しかし、浮動小数点数に変換すると、私のjsonファイルで指定した(浮動小数点数)正確な値が得られないことがあります。あなたの入力をしてください!

これは結構です:float - >double - >float往復変換は、Javaで使用IEEE754フォーマットで正確であることが保証される(唯一の例外は、ペイロードのビットパターンを保存しなくてもよいNaN値であるが、これらとにかくJSONでサポートされていないため、問題にはなりません)。

関連する問題