2013-03-13 64 views
7

我有JSON字符串的遵循snipets:如何将动态字段的Json字符串转换为Object?

{ 
    "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是应代表上述String类。

如果我获得静态字段,它并不复杂。 但在我的情况的值有不同的名称:tech11tech12 ....

我可以使用@SerializedName但其在特定情况下像转换“类”到“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字符串到对象,其中的元素列表是好办法对象也有不同的名字?

谢谢。

+2

结构请出示的'WebObjectResponse'类相关部件,结构。 – 2013-03-13 15:13:43

+0

增加了3个类 – 2013-03-13 15:20:15

+1

现在,它应该完美地映射。如果你有不定数量的'DataInfo'对象,那么考虑使用一个map,将'techXX'作为一个String键。 – 2013-03-13 15:21:04

回答

6

使用地图!

我会做以下

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,新的条目将被添加到您的WebObjectResponse类的Map领域。然后您通过techXX来引用它们或者遍历键集。

假设这样

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

+1和+ V,没想过,谢谢 – 2013-03-13 15:39:18

2

我们需要您的班级结构以了解更多详情。我认为你需要在某处定义一些映射(我使用了xml),然后尝试将json与其中一个映射进行匹配来创建对象。

Google gson很好。我在Jackson

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

希望我能帮上忙。

编辑:Sotirious钉它。

+1

加班结构,谢谢 – 2013-03-13 15:22:49