【发布时间】:2018-10-03 10:28:34
【问题描述】:
我正在研究货币转换器并尝试将货币从 JSON 字符串解析为加倍。正如我所探索的,它的 JSON 代码中的双引号问题,但我从银行 API 获得了这个 JSON,它无法更改。 我尝试使用另一个旧问题的解决方案,但它不起作用(double vrijednostOne = Double.parseDouble(arr.getJSONObject(indexOne).getString("Srednji za devize"));) 是否有任何解决方案可以用双引号将 JSON 解析为双引号?
btnPreracunaj.addActionListener(evtRacunaj -> {
//JSON Array - adds String input from StringBuilder
try {
arr = new JSONArray(response.toString());
int indexOne = comboOne.getSelectedIndex();
int indexTwo = comboTwo.getSelectedIndex();
String valutaOne = arr.getJSONObject(indexOne).getString("Valuta");
double vrijednostOne = Double.parseDouble(arr.getJSONObject(indexOne).getString("Srednji za devize"));
String valutaTwo = arr.getJSONObject(indexTwo).getString("Valuta");
double vrijednostTwo = Double.parseDouble(arr.getJSONObject(indexTwo).getString("Srednji za devize"));
System.out.println(valutaOne);
System.out.println(vrijednostOne);
System.out.println(valutaTwo);
System.out.println(vrijednostTwo);
} catch (JSONException e1) {
e1.printStackTrace();
}
});
有来自 API 的 JSON:
[
{
"Broj tečajnice": "190",
"Datum primjene": "03.10.2018",
"Država": "Australija",
"Šifra valute": "036",
"Valuta": "AUD",
"Jedinica": 1,
"Kupovni za devize": "4,612753",
"Srednji za devize": "4,626633",
"Prodajni za devize": "4,640513"
}
]
这是个例外:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "4,626633"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at Converter.lambda$0(Converter.java:136)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
...
【问题讨论】:
-
克罗地亚(以及许多其他欧洲国家)使用小数点逗号,而英语(因此 Java 的
parseDouble)使用小数点。请咨询Best way to parseDouble with comma as decimal separator? 了解如何处理。 -
不是一个好主意,但您可以用点替换逗号。只需检索字符串值,调用 stringValue.replace(",", ".") 然后解析为 double
-
value.replace(",",".") 工作正常!