如何使用GSON使用动态数字字段名称反序列化JSON?

时间:2013-07-11 22:04:00

标签: java json gson

我有一个这种格式的JSON文件:

 title 1
 {
    "0" : 2,
    "1" : 5,
    "2" : 8        
  }
 title 2
 {        
    "1" : 44,
    "2" : 15,
    "3" : 73,
    "4" : 41
 }       

正如你所看到的那样,索引是动态的 - 在标题1中它们是:“0”,“1”,“2”,标题2是:“1”,“2”,“3”,“4 “

我不知道如何使用GSON阅读此内容。 我需要以某种方式将其转换为java对象,以便我可以继续处理数据。 我们非常欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

首先,页面上显示的JSON无效,JSON无效,因此我的建议是基于以下JSON。只是给你充分的披露。

{
   "title 1":{
      "0":2,
      "1":5,
      "2":8
   },
   "title 2":{
      "1":44,
      "2":15,
      "3":73,
      "4":41
   }
}

选项1(不是我如何解决这个问题)

这会将它序列化为一个可以循环处理的一般对象。

new Gson().fromJson(yourJsonString,Object.class);

选项2(我认为最好的选择) 如果您可以控制对象凸轮在我身上的行为

{
   "listOfTitles":[
      {
         "title":[
            {
               "key":"0",
               "value":1234
            },
            {
               "key":"1",
               "value":12341234
            },
            {
               "key":"2",
               "value":123412341234
            }
         ],
         "titleName":"title 1"
      },
      {
         "title":[
            {
               "key":"0",
               "value":12341
            },
            {
               "key":"1",
               "value":123412
            },
            {
               "key":"2",
               "value":12
            },
            {
               "key":"3",
               "value":12341
            }
         ],
         "titleName":"title 2"
      }
   ]
}

这将允许您构建像...这样的对象。

public class YouObjectName{
   private ArrayList<Title> listOfTitles;
   private String titleName;
   //constructor

   //getters and setters
}

public class Title{
   private String key;

   private Integer value;

   //constructor

   //getters and setters
}

我会像GSON一样使用这个

new Gson().fromJson(jsonString,YouObjectName.class);

希望有所帮助。