我有一个货币的json:
[
{
"acronym": "EUR",
"currency": "Euros",
"favorite": "true",
"placeholder": "\u20ac00.00 EUR",
"symbol": "\u20ac"
}
]
我把它放在资产文件夹中,然后像这样解析:
InputStream stream = context.getAssets().open("currencies.json");
int size = stream.available();
byte[] buffer = new byte[size];
stream.read(buffer);
stream.close();
str = new String(buffer, "UTF-8");
然后我用GSON 将其转换为我的pojo对象
Type objectType = new TypeToken<ArrayList<Currency>>(){}.getType();
ArrayList<Currency> currencies = gson.fromJson(json, objectType);
return currencies;
这很好(我的pojo属性的名称与json中的相同)。
无论如何
例如,当我尝试显示符号时,它并没有按应有的方式显示我得到的是"\u20ac"而不是"€"
txtAmount.setText(currency.getSymbol());
我已经尝试了以下日志
Log.d(currency.getSymbol() + "u20ac");
这给了我:
u20ac€
我不明白为什么它不能正确显示字符。。
您的JSON已转义反斜杠,这意味着它是"反斜杠u 20ac"的JSON表示。
您所需要做的就是而不是转义反斜杠,这样u20ac
就是欧元符号的JSON转义版本:
"symbol": "u20ac"
我还建议使用Guava加载您的字符串,并使用try-with-resources语句:
String json;
try (Reader reader =
new InputStreamReader(context.getAssets().open("currencies.json"),
Charsets.UTF_8)) {
json = CharStreams.toString(reader);
}