Android 解析不带数组的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

我正试图分析这个问题:一个Android应用程序显示美元对玻利瓦尔的非官方汇率

我使用的是这个教程:,我以前成功地使用过它,但是我以前使用的API是由带有子对象的JSON数组组成的。然而,这一个有12个带字符串的JSON对象。没有方括号

我认为我遇到的问题是:

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谢谢你的帮助!