Android 如何修改函数以将json对象检索到嵌套的json?

Android 如何修改函数以将json对象检索到嵌套的json?,android,android-json,jsonschema2pojo,Android,Android Json,Jsonschema2pojo,以下是我目前在代码中使用的json: {"forceDeviceLockout":0,"canStartValue":true,"destructOnRead":[30,60,300]} 我使用以下函数获取json值: private Object getValueForField(Field field) { if (runtimeConfiguration.has(field.fieldName) && field.updateFromServer) {

以下是我目前在代码中使用的json:

{"forceDeviceLockout":0,"canStartValue":true,"destructOnRead":[30,60,300]}
我使用以下函数获取json值:

private Object getValueForField(Field field) {
        if (runtimeConfiguration.has(field.fieldName) && field.updateFromServer) {
            try {
                Object value = runtimeConfiguration.get(field.fieldName);
                if (value instanceof JSONArray) {
                    JSONArray values = (JSONArray) value;
                    if (values.get(0) instanceof Number) {
                        long[] retVals = new long[values.length()];
                        for (int i = 0; i < values.length(); i++) {
                            retVals[i] = ((Number) values.get(i)).longValue();
                        }
                        return retVals;
                    }
                } else if (value instanceof Number) {
                    return ((Number) value).longValue();
                } else {
                    return value;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return field.defaultValue;
    }
私有对象getValueForField(字段){
if(runtimeConfiguration.has(field.fieldName)&&field.updateFromServer){
试一试{
对象值=runtimeConfiguration.get(field.fieldName);
if(JSONArray的值实例){
JSONArray值=(JSONArray)值;
if(value.get(0)instanceof Number){
long[]retVals=新的long[values.length()];
对于(int i=0;i
现在,我有了一个新的嵌套json,如下所示:

{“forceDeviceLockout”:0,“canStartValue”:true,“DestructionRead”:[30,60300],“NEWVALUE”:{“canStartNewValue1”:true,“CanStartRopValue”:true}

在新的json中,我添加了嵌套的json对象:NEWVALUE,它本身有两个对象


我在json方面有点弱,因此不确定如何修改代码以检索上述单个值。有什么想法吗?

如果这些json键是预定义的,我们可以像这样访问它们

   public class SampleModel {

        public int forceDeviceLockout;
        public boolean canStartValue;
        public int[] destructOnRead;
        public NestedModel NEWVALUE; 
}



  public class NestedModel {
    public boolean canStartNewValue1;
    public boolean canStartroupValue;
}



  Gson gson = new Gson();
  SampleModel sampleModel = gson.fromJson("{\"forceDeviceLockout\":0,\"canStartValue\":true,\"destructOnRead\":[30,60,300],\"NEWVALUE\":{\"canStartNewValue1\":true,\"canStartroupValue\":true}}",SampleModel.class);
  Log.d("canStartNewValue : " ,sampleModel.canStartNewValue)
  Log.d("canStartNewValue1 : " , sampleModel.NEWVALUE.canStartNewValue1);

注意:需要添加依赖项
compile'com.google.code.gson:gson:2.8.2'

我不知道你为什么把它弄得这么复杂!但是看看我为你写的这段代码。它可能会给你一个想法:

public void printFieldsValues(Object object){
    try{
        Field[] fields = object.getClass().getFields();

        JSONObject jsonObject = new JSONObject();

        for(Field field : fields){
            jsonObject.put(field.getName(), field.get(object));
        }

        JSONObject newValue = new JSONObject("{\"canStartNewValue1\":true,"
                                             + "\"canStartroupValue\":true}");

        jsonObject.put("NEWVALUE", newValue);

        printJson(jsonObject);

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

public void printJson(JSONObject jsonObject) throws JSONException{
    Iterator<String> keys = jsonObject.keys();
    String           key;
    while(keys.hasNext()){
        key = keys.next();
        try{
            printJson(new JSONObject(jsonObject.getString(key)));
        }catch(Exception e){
            Log.d("TAG", "key = " + key);
            Log.d("TAG", "value = " + jsonObject.get(key).toString());
        }
    }
}

如果您只想修改当前代码以解析接收到的json,那么只需添加
if(JSONObject的值实例){
JSONObject JSONObject=(JSONObject)值;
返回jsonObject;

}

不使用gson,只修改我的代码就可以了吗?为了让您更深入地了解我的代码,这里有一个链接:@MarissaNicholas建议您使用gson或任何其他库将JSON转换为POJO,然后再转换回来。它们可以帮助您处理您编写的样板代码above@AkshayChordiya有没有电子邮件一种不引用两个类的更好方法,比如enum字段?我也需要嵌套我的子json值吗?@MarissaNicholas理想情况下,我们使POJO类与json的方式完全相同,也就是说,在您的情况下,您的json是嵌套的,在这种情况下,您需要两个POJO来表示json。我认为enum不适用于您使用的json这是无效的。
printFieldsValues(this);