我的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字符串。
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
}
如果您有更多的可能性,例如布尔值或整数或长整型,请参考this
optJSONObject
返回按名称映射的值(如果存在并且是 JSONObject),或者 否则为 null。
或者按照 lawrance 给出的方式进行: 确定 JSON 是 JSONObject 还是 JSONArray
试试这个:
JSONObject changemama=jsonObject.optJSONObject("changemama");
if(changemama== null){
String str=jsonObject.optString("changemama");
}
试试这个代码。
JSONObject data;
try {
data = jsonObj.getJSONObject("changemama");
// do stuff
} catch (JSONException e) {
data = jsonObj.getString("changemama");
// do stuff
}
试试这个:
if(obj.has("changemama")){
if(obj.optString("changemama").length() > 0){}
else if(obj.optJSONObject("changemama").length() > 0){}}
为了简化android开发,我们可以要求后端开发者更改Mobile API。新的API可以返回不能更改值的json字符串。所有键的值有时不能是字符串,有时是对象。