9

我有以下 Json String 片段:

 {
  "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应该代表上述字符串的类在哪里。

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

我可以使用@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 String 转换为 Object 的好方法是什么,其中元素列表也是 Objects 并且具有不同的名称?

谢谢你。

4

3 回答 3

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

对于 jsonnetworks中的每个对象,都会将一个新条目添加到Map您的类的字段中WebObjectResponse。然后,您可以通过密钥集引用它们techXX或迭代它们。

假设这样的结构

{
  "networks": {
    "tech11": {
        "id": "1",
        "name": "IDEN"
    },
    "tech12": {
        "id": "2",
        "name": "EVDO_B"
    },
    "tech13": {
        "id": "3",
        "name": "WOHOO"
    }, ...
  }
}
于 2013-03-13T15:25:58.307 回答
2

我们需要您的班级结构以获取更多详细信息。

据我所知,我认为您需要在某处定义一些映射(我使用了 xml),然后尝试将 json 与其中一个映射匹配以创建对象。

谷歌 gson 不错。我在杰克逊做过

此外,转换对象应该是微不足道的。但是由于您可能有像tech11and这样的变量字段tech12,您可能希望将“网络”值存储为字符串,然后在需要时从中提取字段。

希望我能帮上忙。

编辑: Sotiirious 指出它。

于 2013-03-13T15:17:33.657 回答
0

请使用此链接将 SON 响应转换为 Java POJO 类 http://www.jsonschema2pojo.org/

于 2021-02-23T10:48:11.027 回答