动态json键值的Gson解析器类-Android
我已经使用gson库解析json响应。它工作得很好。现在我遇到了一个问题 我收到了以下来自webservice的回复。json键值不是静态的,它将动态更改 如何编写解析器类来解析下面的响应 格式化JSON:动态json键值的Gson解析器类-Android,android,gson,Android,Gson,我已经使用gson库解析json响应。它工作得很好。现在我遇到了一个问题 我收到了以下来自webservice的回复。json键值不是静态的,它将动态更改 如何编写解析器类来解析下面的响应 格式化JSON: { "meta": { "code": 201, "dataPropertyName": "activity", "currentTime": "2014-02-05 06:15:04", "listedCount":
{
"meta": {
"code": 201,
"dataPropertyName": "activity",
"currentTime": "2014-02-05 06:15:04",
"listedCount": "2"
},
"activity": [
{
"comments": [
{
"raja": {
"type": "Liked",
"userPhoto": "663.png",
"userId": "74",
"userName": {
"1_0": "longjump"
},
"postOwner": "you",
"postDetails": {
"471": {
"postImage": "972.png",
"postId": "471",
"postType": "1"
}
},
"dateTime": "2014-02-05 05:24:56",
"sameOwner": "1"
}
}
]
},
{
"follow": [
{
"you": {
"type": "follow",
"followByUserName": {
"0_0": "olivepop",
"1_0": "yadidroy",
"2_0": "chitra"
},
"followUserName": "you",
"followByUserPhoto": "242.png",
"followUserPhoto": "953.png",
"dateTime": "2014-01-09 06:50:42"
}
}
]
}
],
"notifications": [
"Activities has been retrieved successfully"
]
}
根据您的规范,您可以创建一个默认的Webservice response model.java,如下所示:
String success;
@SerializedName("error_msg")
String errorMessage;
@SerializedName("error_code")
String errorCode;
JsonObject data;
其中,具有动态键的对象的父对象将是“数据”。使用Gson,映射模型类:
webserviceResponse= gson.fromJson(contentResponse,WebserviceResponse.class);
if (StringUtils.isNotEmpty(webserviceResponse.getSuccess()) &&
StringUtils.equalsIgnoreCase(webserviceResponse.getSuccess(), "success")) {
//check for the dynamic key name
JsonObject job = webserviceResponse.getData();
dynamicallyDefinedKeyClass= gson.fromJson(job.get("dynamicKeyValue"), DynamicallyDefinedKeyClass.class);
}
将以任何方式编辑我的问题编辑答案,如果它有帮助的话只是一个建议-raja,you等。可以是键名或注释的值吗?您从何处获取此响应?如果可能,获取包含所有可能“Key”值的JSON响应,然后从以下链接获取POJO类自动生成: 它将自动处理所有可能性。但是,请确保在生成POJO时提供的响应应该包含所有可能的键组合[更改一次] 希望这有帮助 使用这个解析器类
Meta meta = new Meta();
ArrayList<Activity> activity = new ArrayList<ActivityParser.Activity>();
ArrayList<String> notifications = new ArrayList<String>();
public class Meta
{
String code,dataPropertyName,currentTime,listedCount;
}
public class Activity
{
ArrayList<HashMap<String, CommentsItem>> comments = new ArrayList<HashMap<String,CommentsItem>>();
public class CommentsItem
{
String type,userPhoto,userId,postOwner,dateTime,sameOwner;
HashMap<String, String> userName = new HashMap<String,String>();
HashMap<String, PostDetails> postDetails = new HashMap<String,PostDetails>();
public class PostDetails
{
String postImage,postId,postType;
}
}
ArrayList<HashMap<String, FollowItem>> follow = new ArrayList<HashMap<String,FollowItem>>();
public class FollowItem
{
String type,followUserName,followByUserPhoto,followUserPhoto,dateTime;
HashMap<String, String> followByUserName = new HashMap<String,String>();
}
}
Meta-Meta=new-Meta();
ArrayList活动=新建ArrayList();
ArrayList通知=新建ArrayList();
公共类元
{
字符串代码,dataPropertyName,currentTime,listedCount;
}
公共课堂活动
{
ArrayList comments=新的ArrayList();
公共类评论
{
字符串类型,userPhoto,userId,postOwner,dateTime,sameOwner;
HashMap用户名=新建HashMap();
HashMap postDetails=新建HashMap();
公开课邮递详情
{
字符串postImage、postId、postType;
}
}
ArrayList follow=新的ArrayList();
公共类FollowItem
{
字符串类型,followUserName,followByUserPhoto,followUserPhoto,dateTime;
HashMap followByUserName=新HashMap();
}
}
您是否有一个字段不是静态的动态键。。。?在您提供的示例json str中,所有这些都是相同的。在该响应中,raja,471,您,1_0,2_0,3_0,是动态键值我如何知道“dynamicKeyValue”。它将改变每一个Web服务。那么我如何在“raja”中给出dynamickeyValue。对象和键不是动态的——“type”、“userPhoto”、“userId”。因此,您需要为“raja”、“you”的内容提供模型类,您可以从Json对象中获得这些内容。对于动态键,这是没有帮助的。因为它将尝试为每个对象使用不同的动态键考虑单独的类,尽管内容将保持相同。