我正在研究货币转换器,并尝试将JSON String中的货币解析为两倍。正如我所探索的那样,它的问题是用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)
...
答案 0 :(得分:2)
由于货币价格似乎使用的是本地格式,因此您需要在您的语言环境(或更确切地说是本地的银行)中使用数字格式器
NumberFormat format = NumberFormat.getInstance(new Locale("hr","HR"));
double price = format.parse(arr.getJSONObject(indexOne).getString("Srednji za devize"));
基于评论,我使用了Croation作为语言环境,但在here中查找了语言环境的完整列表。
答案 1 :(得分:2)
您可以在下面的链接中找到答案。它使用语言环境转换具有','而不是'。'的字符串。成两倍。解析错误是因为解析字符串要加倍期望货币中的小数点。
答案 2 :(得分:-1)
您可以使用一种方法:
currency = currency.substring(1, currency.length()-1);
double mainCurrency = Double.ParseDouble(currency);