java - 如何将带有动态字段的 Json String 转换为 Object?

标签 java json

我有以下 Json 字符串片段:

 {
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    }
 }
}

我使用一些方法将这个字符串转换为对象:

    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;

}

WebObjectResponse 是代表上述字符串的类。

如果我得到静态字段,它并不复杂。 但在我的例子中,这些值有不同的名称:tech11tech12 ....

我可以使用 @SerializedName 但它在特定情况下有效,例如将“class”转换为“class_”。 如您所见,networks 对象定义为 tech 对象列表,但具有不同的后缀。

public class WebObjectResponse{
 private DataInfoList networks = null;
} 

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

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


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

将当前 Json 字符串转换为对象的好方法是什么,其中元素列表也是对象并且具有不同的名称?

谢谢。

最佳答案

使用 map !

我会做以下事情

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);

对于 json networks 中的每个对象,一个新条目将添加到类 WebObjectResponseMap 字段中。然后,您可以通过 techXX 引用它们或遍历键集。

假设这样的结构

{
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    },
    "tech13": {
        "id": "3",
        "name": "WOHOO"
    }, ...
  }
}

关于java - 如何将带有动态字段的 Json String 转换为 Object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389110/

相关文章:

java - JAVA EE应用程序中导出大量数据

javascript - 使用函数设置变量值的单行代码,如果为假则抛出异常

javascript - JSON 安全最佳实践?

java - Tapestry 5 : Value of password field not bound to variable

javax 验证约束在 Spring Boot 中不起作用

java - 使用 Java/Jackson 解析 JSON

ios - 当我在 url 中包含空格时 AFHTTPRequestSerializer 中的 AfNetworking 失败

javascript - 字符串包含 ; 的 Cookie

java - Java中XML空元素的输出格式

java - 在 Java 中为变量分配动态名称