【问题标题】:Need help formatting a JSON array需要帮助格式化 JSON 数组
【发布时间】:2015-07-15 16:26:26
【问题描述】:

我的网络服务有这个数组:{"update":true,"msg":"Logged in Bro","role":"admin"}

现在,我需要在 Android 中使用它来处理我的应用程序,而不是登录。所以我在这里需要一种将这些数据格式化为名称值对或单个变量的方法,以便我可以使用它们。

我目前正在使用它,但它会强制关闭我的应用程序:

try {

            JSONObject jsonRootObject = new JSONObject(result);

            //Get the instance of JSONArray that contains JSONObjects
            JSONArray jsonArray = jsonRootObject.optJSONArray("");

            //Iterate the jsonArray and print the info of JSONObjects
            for(int i=0; i < jsonArray.length(); i++){
                JSONObject jsonObject = jsonArray.getJSONObject(i);

                update = jsonObject.optString(jsonObject.optString("update").toString());
                message = jsonObject.optString("msg").toString();
                role = jsonObject.optString(jsonObject.optString("role").toString());


            }

        } catch (JSONException e) {e.printStackTrace();}

【问题讨论】:

  • 哪一行导致崩溃?
  • json 不包含数组(没有 [ ] )
  • 所以在你提供的json中,没有数组,只有一个JSONObject包含3个值:boolean "update",和两个Strings:"msg"和"role"

标签: android arrays json rest name-value


【解决方案1】:

要解析您提供的 JSON,您需要这样的东西:

   JSONObject jsonObject = new JSONObject(jsonString);

   update = jsonObject.optBoolean("update");
   message = jsonObject.optString("msg");
   role = jsonObject.optString("role");

【讨论】:

    【解决方案2】:

    我假设 result 包含您的 JSON 作为 String

    {"update":true,"msg":"Logged in Bro","role":"admin"}
    

    因此,

    JSONObject jsonRootObject = new JSONObject(result);
    

    创建一个具有三个属性的 JSON 对象,updatemsgrole。您可以像这样访问它们:

    boolean update = jsonRootObject.optBoolean("update");
    String msg = jsonRootObject.optString("msg");
    String role = jsonObject.optString("role");
    

    您的代码在jsonArray.length() 上崩溃,因为jsonArray == nulljsonRootObject.optJSONArray(""); 返回null,因为您的对象中没有键为"" 的数组。


    optString("msg").toString();
    

    本身就是不合逻辑的。 optString 返回 Stringnull。如果属性 msg 不存在,您的代码将崩溃。如果您希望存在属性,请使用getString 而不是optString。一般来说,不要在Strings 上拨打toString()


    jsonObject.optString(jsonObject.optString("role").toString());
    

    也没有意义。您的对象中没有与属性role 的值相等的键。

    【讨论】:

    • 我喜欢你描述性地向我解释代码的方式。真的很感激。已经使用并标记了上述帮助,因此无法将您的标记为正确答案,但这是很大的帮助,我希望人们从中学习。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多