【发布时间】:2019-01-13 13:14:56
【问题描述】:
我不熟悉 JSON,所以如果我使用了错误的术语,很抱歉。
所以我有这个网址:
final String PRICE_TRY_URL = "https://api.coindesk.com/v1/bpi/currentprice/try.json";
它返回如下内容:
格式化的 JSON 数据
{
"time":{ },
"disclaimer":"This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org",
"bpi":{
"USD":{
"code":"USD",
"rate":"6,911.7500",
"description":"United States Dollar",
"rate_float":6911.75
},
"TRY":{
"code":"TRY",
"rate":"35,738.0058",
"description":"Turkish Lira",
"rate_float":35738.0058
}
}
}
我只想达到 TRY 的速度。 我通过下面的代码获得了这些数据。
public void doNetworking(){
AsyncHttpClient client=new AsyncHttpClient();
client.get(PRICE_TRY_URL, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.d("BitcoinTracker","Succes in doNetworking");
// byte[] responseBody can be parsed to a json object.
parseJson(responseBody);
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e("BitcoinTracker", "Fail " + error.toString());
}
}
);
这是我的方法:
public void parseJson(byte[] responseBody){
try {
JSONObject bitcoinJson =new JSONObject(new String(responseBody));
String currency= bitcoinJson.getString("bpi");
Log.d("bitcoinmanager",currency);
} catch (JSONException e) {
Log.d("BitcoinPrice","BitcoinPriceManager onSucces converting json from byte[] failed.");
e.printStackTrace();
}
}
正如你在上面看到的,我使用了这个语句:
String currency= bitcoinJson.getString("bpi");
使用此语句,我无法到达目标点,即 TRY 的汇率。如何在 JSON 格式的文本中导航?
注意:我添加了获取 JSON 数据部分以确保我的问题很清楚,希望不要太多。
【问题讨论】:
-
String currency= bitcoinJson.getString("bpi");这个语句将返回一个对象,该对象具有键USD和TRY,然后提取TRY,最后你会得到它的速率。 -
@jackjay 真的吗?
getString返回一个对象,而不是String?我想你的意思是getJSONObject。 -
那是因为
bpi后面的条目不是字符串。为什么要使用 getString()? -
@Andreas 是的。
标签: java android json android-studio