【问题标题】:A value of a json str sometimes is a String, sometimes is a object, how could i use gson to parse itjson str 的值有时是字符串,有时是对象,我如何使用 gson 来解析它
【发布时间】:2016-11-06 19:34:16
【问题描述】:

就像标题一样,我的 json str 有时是这样的:

{
    "data": {
        "changebaby": "no change",
        "changemama": {
            "mamacontext": "mama is a good mama",
            "mamaico": "",
            "mamatitle": "mama"
        }
    }
}

有时是这样的:

{
    "data": {
        "changebaby": "no change",
        "changemama": "no change"
    }
}

如您所见,“changebaby”键和“changemama”键的值有时是字符串,有时是对象,我应该如何通过gson解析它?有人能帮帮我吗?


不要使用android api来解析json字符串,需要使用google的gson lib来解析json字符串,有人能帮帮我吗?

【问题讨论】:

  • 检查此url。希望对你有帮助。
  • @Lawrance 是对的,您必须与 instanceof 核实

标签: android json gson


【解决方案1】:
if(jsonObject.optJSONObject("changemama") != null)
{
     JSONObject changemama=jsonObject.optJSONObject("changemama");
     //Its JSON object, do appropriate operation
}
else if(jsonObject.optString("changemama") != null)
{
     //Its string, do appropriate operation
}

如果您有更多的可能性,例如 boolean、int 或 long,请参考 this

optJSONObject

如果存在并且是 JSONObject,则返回按名称映射的值,或者 否则为空。

或者按照劳伦斯给出的方式:Determine whether JSON is a JSONObject or JSONArray

【讨论】:

    【解决方案2】:

    试试这个:

    JSONObject changemama=jsonObject.optJSONObject("changemama");
        if(changemama== null){
             String str=jsonObject.optString("changemama");
    }
    

    【讨论】:

      【解决方案3】:

      试试这个代码。

      JSONObject data;
      try {
          data = jsonObj.getJSONObject("changemama");
      
          // do stuff
      
      } catch (JSONException e) {
          data = jsonObj.getString("changemama");
      
          // do stuff
      }
      

      【讨论】:

      • 程序崩溃的可能性为 50%..!!
      • 你能解释一下吗?
      • 不能保证该对象将是字符串或JSON对象,其中没有一个程序将崩溃使用optStringoptJsonObject代替..!!
      • 在他的情况下.. 他很确定他会得到其中任何一个。但无论如何感谢您的指出。
      • @vrundpurohit 不,在json字符串中,changebaby和changemama的值都不确定,可能是字符串也可能是对象。
      【解决方案4】:

      试试这个:

      if(obj.has("changemama")){
         if(obj.optString("changemama").length() > 0){}
         else if(obj.optJSONObject("changemama").length() > 0){}}
      

      【讨论】:

        【解决方案5】:

        为了简化android开发,我们可以要求后端开发者更改Mobile API。新的API可以返回无法更改值的json字符串。所有键的值有时不能是字符串,有时是一个对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          相关资源
          最近更新 更多