GSON让从物体火力般的JSON(Gson make firebase-like json from

2019-09-29 09:12发布

在过去的一个手动作为数据,将其本地存储在数据库中的列表创建。 现在,我想分析这些数据,并把它们通过进口JSON选项进入火力DBS,但我得到什么并不像火力生成JSON。

我得到的是:

[  
   {  
      "id":"id_1",
      "text":"some text"
    },
    {  
      "id":"id_2",
      "text":"some text2"
    },
    ...
]

我想是这样的:

{  
   "id_1": {  
      "text":"some text",
      "id":"id_1"
    },
    "id_2":{  
      "text":"some text2",
      "id":"id_1"
    },
    ...
}

我的卡类

class Card{
    private String id;
    private String text;

}

检索数据

//return list of card
List<Card> cards =myDatabase.retrieveData();
Gson gson = new Gson();
String data = gson.toJson(cards);

所以,我怎么能我做到这一点(在我看来)动态命名为JSON看起来像由火力生成的属性呢?

编辑:我发现GSON具有FieldNamingStrategy接口,能够改变的字段的名称。 但在我看来这不是动态的,因为我想要的。

EDIT2我的临时补丁是只覆盖的toString()

 @Override
 public String toString() {
     return "\""+id+"\": {" +
                     "\"text\":" + "\""+text+"\","+
                     "\"id\":" +"\""+ id +"\","+
                     "\"type\":"+ "\""+ type +"\""+
             '}';
    }

Answer 1:

您的“临时修复”将每个对象存储为一个字符串不是一个对象。

您需要将对象序列来获取数据,而不是一个列表。

例如,使用地图

List<Card> cards = myDatabase.retrieveData();
Map<Map<String, Object>> fireMap = new TreeMap<>();
int i = 1;
for (Card c : cards) {
    Map<String, Object> cardMap = new TreeMap<>();
    cardMap.put("text", c.getText());
    fireMap.put("id_" + (i++), cardMap);
}
Gson gson = new Gson();
String data = gson.toJson(fireMap);


文章来源: Gson make firebase-like json from objects