如何将Json String与动态字段转换为Object?

Max*_*tin 9 java json

我有跟随Json String的snipets:

 {
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

我使用一些方法将此String转换为Object:

    private static Gson mGson = new Gson();

    ...

public static WebObjectResponse convertJsonToObject(String jsonString) {

    WebObjectResponse webObjectResponse = null;


    if(jsonString != null && jsonString.length() > 1){
        webObjectResponse = mGson.fromJson(jsonString, WebObjectResponse.class);
    }

    return webObjectResponse;

}
Run Code Online (Sandbox Code Playgroud)

哪个WebObjectResponse类应该代表上面提到的String.

如果我得到静态字段,它并不复杂.但在我的情况下,值有不同的名称:tech11,tech12....

我可以使用@SerializedName但它的工作在特定的情况下,如转换"类"到"class_".如您所见,networks对象定义为tech对象列表但具有不同的后期修复.

public class WebObjectResponse{
 private DataInfoList networks = null;
} 
Run Code Online (Sandbox Code Playgroud)

这是静态实现,我定义了2个值tech11,tech12但下一个响应可能是techXX

public class DataInfoList {
 private DataInfo tech11 = null;
 private DataInfo tech12 = null;
}


public class DataInfo {
 private String id = null;
 private String name = null;
}
Run Code Online (Sandbox Code Playgroud)

将当前Json String转换为Object的好方法是什么,其中元素列表也是Objects,并且具有不同的名称?

谢谢.

Sot*_*lis 7

使用地图!

我会做以下事情

public class WebObjectResponse {
     private Map<String, DataInfo> networks;
} 

public class DataInfo {
     private String id = null;
     private String name = null;
}

// later
Gson gson = new Gson();
String json = "{\"networks\": {\"tech11\": { \"id\": \"1\",\"name\": \"IDEN\" },  \"tech12\": { \"id\": \"2\", \"name\": \"EVDO_B\" }    }}";

WebObjectResponse response = gson.fromJson(json, WebObjectResponse .class);
Run Code Online (Sandbox Code Playgroud)

对于json中的每个对象,networks将在Map您的类的字段中添加一个新条目WebObjectResponse.然后,您可以techXX通过键盘集引用它们或迭代它们.

假设这样的结构

{
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    },
    "tech13": {
        "id": "3",
        "name": "WOHOO"
    }, ...
  }
}
Run Code Online (Sandbox Code Playgroud)