我需要从https://realtimebitcoin.info/stats/获取JSON数据 (顺便说一下,该链接可能会将您仅重定向到https://realtimebitcoin.info/或https://realtimebitcoin.info,如果发生这种情况,只需在搜索框文本的末尾添加stats /或/ stats /)。
不幸的是,这个JSON文档的作者没有费心用方括号括起来,甚至无法正确解析该文档。我试图用“ []”强行包围它,但是那只在末尾创建了一个空对象,并且仍然无法解析。我的意思是JSONException一直被抛出。这是代码:
private static class UpdateBitcoinData extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... voids) {
try {
// URL url = new URL("https://api.myjson.com/bins/j5f6b");
// URL url = new URL("https://api.myjson.com/bins/gfoa2");
String data = "";
URL url = new URL("https://realtimebitcoin.info/stats/");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while (line != null) {
line = bufferedReader.readLine();
data = data + line;
}
String fixed = "[" + data + "]";
JSONArray jsonArray = new JSONArray(fixed);
for (int index = 0; index < jsonArray.length(); index++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(index);
/* singleParsed = "Name:" + JO.get("name") + "\n"+
"Password:" + JO.get("password") + "\n"+
"Contact:" + JO.get("contact") + "\n"+
"Country:" + JO.get("country") + "\n"; */
BitcoinInformation.TEST = String.valueOf(jsonObject.get("ticker"));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
BitcoinInformation.TEST = e.getMessage();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
任何解决方案都将有所帮助!
答案 0 :(得分:0)
这样的JSON端点很少(甚至永远是手写的),通常会通过某种对象的库通过库转换为JSON。
提供的链接是具有属性ticker
,totalbtc
和hashrate
的JSON对象。
请记住,解析JSON的最简单方法是使用JSONObject。
JSONObject jObject = new JSONObject( str );
其中str
是包含JSON的字符串。详细了解如何使用JSONObject
here