我如何解析 Json 对象或数组?我的代码哪里出错了?
Posted
技术标签:
【中文标题】我如何解析 Json 对象或数组?我的代码哪里出错了?【英文标题】:How i can parse in Json Object or Array? Where is error on my code? 【发布时间】:2021-04-02 18:31:49 【问题描述】:我在 android Studio 上解析 Json 时有一些错误, 如果您有任何想法,请分享我的错误在哪里。
我想获取当前汇率信息并在textview上打印出来。
Json/Api 网址:https://api.exchangeratesapi.io/latest?base=USD
private void jsonParse()
String SHOP_URL = "https://api.exchangeratesapi.io/latest?base=USD&symbols=EUR,GBP";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, SHOP_URL, null,
new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
try
JSONArray jsonArray = response.getJSONArray("rates");
for (int i = 0; i < jsonArray.length(); i++)
JSONObject result = jsonArray.getJSONObject(i);
int xGBP=result.getInt("GBP");
usdtry.setText(String.valueOf(xGBP));
catch (JSONException e)
e.printStackTrace();
,new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
error.printStackTrace();
);
pRequestQueue.add(request);
这段代码没有出错但没有任何响应..我想我有一些遗漏。
【问题讨论】:
【参考方案1】:rates
是 JsonObject
,而不是数组。
所以,你的代码必须是
JSONObject rates = response.getJSONObject("rates");
double xGBP = rates.getDouble("GBP");
usdtry.setText(String.valueOf(xGBP));
另外,为了更好的格式,您可以使用:
DecimalFormat formatter = new DecimalFormat("###,###.##", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
usdtry.setText(formatter.format(xGBP));
【讨论】:
感谢我像您的解决方案一样更改了我的代码,但仍然没有在我的文本视图上显示结果。我需要使用 JsonObjectRequest 部分吗? @LutfuA。您必须从您拥有的e.printStackTrace();
s 中获得一些错误日志。请在问题中发布它们
那么你只需要调试它。尝试打印 JSON 响应和 rate 对象
只使用 Jsonobject 对象时,我应该在哪里添加 URL?需要回复吗?
感谢您的解决方案。我明白我的错误在哪里。以上是关于我如何解析 Json 对象或数组?我的代码哪里出错了?的主要内容,如果未能解决你的问题,请参考以下文章
AsyncTask #3 解析 JSON 对象时出错。字符串无法转换为 JSONObject