我如何使用 gson 和 json 对象数组 json 解析 json

how can I parse json using gson with Json Array of json objects

下面是我的 json,我想使用 json 解析它。

{  
   "status":{  
      "code":200
   },
   "authKey":"xyz",
   "requireUpdate":false,
   "features":[  
      {  
         "accounting":true
      },
      {  
         "channel":true
      },
      {  
         "skipfornow":false
      },

      {  
         "xyz":false
      },
     {  
         "abc":false 
      }
   ]
}

型号class

public class LoginResponse
{
    private String authKey;

    private Status status;

    private Features[] features;

    private String requireUpdate;

    public String getAuthKey ()
    {
        return authKey;
    }

    public void setAuthKey (String authKey)
    {
        this.authKey = authKey;
    }

    public Status getStatus ()
    {
        return status;
    }

    public void setStatus (Status status)
    {
        this.status = status;
    }

    public Features[] getFeatures ()
    {
        return features;
    }

    public void setFeatures (Features[] features)
    {
        this.features = features;
    }

    public String getRequireUpdate ()
    {
        return requireUpdate;
    }

    public void setRequireUpdate (String requireUpdate)
    {
        this.requireUpdate = requireUpdate;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [authKey = "+authKey+", status = "+status+", features = "+features+", requireUpdate = "+requireUpdate+"]";
    }
}



public class Status
{
    private String code;

    public String getCode ()
    {
        return code;
    }

    public void setCode (String code)
    {
        this.code = code;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [code = "+code+"]";
    }
}

public class Features
{
    private String accounting;

    public String getAccounting ()
    {
        return accounting;
    }

    public void setAccounting (String accounting)
    {
        this.accounting = accounting;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [accounting = "+accounting+"]";
    }
}

如您所见,json 中的特征字段是一个 json 数组,除特征中的值外,一切正常。从功能 class 我只获得了会计的价值,但我也想要频道和 skipfornow 键的价值,我怎样才能得到这个。 features json 数组可以有 100 个 json 个对象,

例如 features json 数组有 100 个 json 对象,每个 json 对象有不同的键值对,它来自服务器,有时它可能有 50 json 个对象,有时它可能有 100 个 json 个对象,每个对象都有不同的键

那我应该如何创建特征模型呢?。

创建 class Features 成员 accounting,channel,skipfornow

并且在您的 LoginResponse class 中使用具有对象的特征 features .

Gson 会自动检测所有these.Object 参考名称非常重要。

您需要在 Features class

中添加 channelskipfornow
public class Features {
    private String accounting;
    private String channel;
    private String skipfornow;

    //Getters && Setters
    //...
}

你能再解释一下这句话吗?

features json Array can have lets say 100 json objects then how should I create the feature model ?.

你的意思是你可以拥有其他对象,如 id 或其他什么?如果是这样,您必须在功能 class 中添加所有可能的对象。如果 json 对象存在,您将拥有该值,否则您将获得默认值。

编辑 如果您创建自己的反序列化器(this this ),也许您可​​以做些事情。这是一个想法(只是一个想法,我现在无法测试)。希望对你有所帮助。

/**
 * New Pojo
 */
public class Features {
    private Set<Map.Entry<String,JsonElement>> entries;

    public void add(Map.Entry<String,JsonElement> element) {
        entries.add(element);
    }
}

/**
 * Features deserializer
 */
public class FeaturesDeserializer implements JsonDeserializer<Features> {
    @Override
    public FeaturesDeserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {

        JsonArray jarray = json.getAsJsonArray();

        Features features = new Features();

        for(int i=0; i< jarray.size(); i++) {
            JsonObject jobject = jarray.get(i).getAsJsonObject();
            //Use of entrySet because your object's name are random
            for(Map.Entry<String,JsonElement> m : jobject.entrySet()) {
                features.add(m);
            }
        }

        return features;
    }
}