Android 解析不带数组的JSON文件
我正试图分析这个问题:一个Android应用程序显示美元对玻利瓦尔的非官方汇率 我使用的是这个教程:,我以前成功地使用过它,但是我以前使用的API是由带有子对象的JSON数组组成的。然而,这一个有12个带字符串的JSON对象。没有方括号 我认为我遇到的问题是:Android 解析不带数组的JSON文件,android,json,Android,Json,我正试图分析这个问题:一个Android应用程序显示美元对玻利瓦尔的非官方汇率 我使用的是这个教程:,我以前成功地使用过它,但是我以前使用的API是由带有子对象的JSON数组组成的。然而,这一个有12个带字符串的JSON对象。没有方括号 我认为我遇到的问题是: if (jsonStr != null) { try { JSONObject jsonObj = new JSONObject(jsonStr); // Getting JSON Array node JS
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("contacts");
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("id");
String name = c.getString("name");
String email = c.getString("email");
String address = c.getString("address");
String gender = c.getString("gender");
// Phone node is JSON Object
JSONObject phone = c.getJSONObject("phone");
String mobile = phone.getString("mobile");
String home = phone.getString("home");
String office = phone.getString("office");
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
}
代码无法编译,Android Studio检测到一个“未处理的异常:org.json.JSONException”
。我能做些什么来改变这个
任何帮助都将不胜感激。我的代码的其余部分也有其他问题,但我想我可以在完成这项工作后解决这些问题。在使用org.json库类时,如果json响应由方括号“[”组成,那么我们需要将该元素作为JSONArray获取,否则将该元素作为JSONObject获取
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject antibloqueo = jsonObject.getJSONObject("_antibloqueo");
JSONObject labels = jsonObject.getJSONObject("_labels");
JSONObject timestamp = jsonObject.getJSONObject("_timestamp");
JSONObject USD = jsonObject.getJSONObject("USD");
JSONObject EUR = jsonObject.getJSONObject("EUR");
JSONObject COL = jsonObject.getJSONObject("COL");
JSONObject GOLD = jsonObject.getJSONObject("GOLD");
JSONObject USDVEF = jsonObject.getJSONObject("USDVEF");
JSONObject USDCOL = jsonObject.getJSONObject("USDCOL");
JSONObject EURUSD = jsonObject.getJSONObject("EURUSD");
JSONObject BCV = jsonObject.getJSONObject("BCV");
JSONObject MISC = jsonObject.getJSONObject("MISC");
//To get Values From antibloqueo
String mobile = antibloqueo.getString("mobile");
String video = antibloqueo.getString("video");
//To get Values From labels
String a = labels.getString("DOLARTODAY");
String a1 = labels.getString("a1");
} catch (JSONException e) {
Log.e("TAG", "Json parsing error: " + e.getMessage());
}
注意:
在处理较小的项目时,您可以使用org.json库作为json转换器。对于较大的项目,您必须使用其他库,如Gson/Jackson
在使用org.json库类时,如果json响应由方括号“[”组成,那么我们需要将该元素作为JSONArray获取,否则将该元素作为JSONObject获取
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject antibloqueo = jsonObject.getJSONObject("_antibloqueo");
JSONObject labels = jsonObject.getJSONObject("_labels");
JSONObject timestamp = jsonObject.getJSONObject("_timestamp");
JSONObject USD = jsonObject.getJSONObject("USD");
JSONObject EUR = jsonObject.getJSONObject("EUR");
JSONObject COL = jsonObject.getJSONObject("COL");
JSONObject GOLD = jsonObject.getJSONObject("GOLD");
JSONObject USDVEF = jsonObject.getJSONObject("USDVEF");
JSONObject USDCOL = jsonObject.getJSONObject("USDCOL");
JSONObject EURUSD = jsonObject.getJSONObject("EURUSD");
JSONObject BCV = jsonObject.getJSONObject("BCV");
JSONObject MISC = jsonObject.getJSONObject("MISC");
//To get Values From antibloqueo
String mobile = antibloqueo.getString("mobile");
String video = antibloqueo.getString("video");
//To get Values From labels
String a = labels.getString("DOLARTODAY");
String a1 = labels.getString("a1");
} catch (JSONException e) {
Log.e("TAG", "Json parsing error: " + e.getMessage());
}
注意:
在处理较小的项目时,您可以使用org.json库作为json转换器。对于较大的项目,您必须使用其他库,如Gson/Jackson
在第二个代码中,您在捕获(最终JSONException e)之前得到了不必要的花括号。“dolartoday”:1026.13,代码:`String usdtrans=c.getString(“dolartoday”);`json的值不是字符串。它是双精度的。如果您获取字符串,它将是错误的。不,它不会。双精度的值将转换为字符串并返回。您在第二个代码中的catch(final JSONException e)之前得到了不必要的花括号。“dolartoday”:1026.13,代码:`String usdtrans=c.getString(“多拉托代”)因为我已经检查过了,是的,有一个if。我也得到了“无法解析符号结果”"在onPostExecute变量上。不知道我可以将代码粘贴到注释中的何处抱歉花了很长时间,这里是这样的:我的代码基于本教程:,它将代码解析为ListView。我不想要ListView,因为我想将代码解析为两个简单的TextView,所以我尝试将其删除。这就是我认为会出现错误的原因。t谢谢你的帮助!太好了,我已经解决了那个部分,但是现在我有几个以前没有的错误。我在新代码下面得到了一个没有if错误的else。我不知道那里会出什么问题,因为我已经检查过了,是的,有if。我还得到了“无法解析符号结果”在onPostExecute变量上。不知道我可以将代码粘贴到注释中的何处抱歉花了很长时间,这里是这样的:我的代码基于本教程:,它将代码解析为ListView。我不想要ListView,因为我想将代码解析为两个简单的TextView,所以我尝试将其删除。这就是我认为会出现错误的原因。t谢谢你的帮助!