【问题标题】:How to add an index in json data?如何在json数据中添加索引?
【发布时间】:2013-03-24 12:56:25
【问题描述】:

我有以下数据结构:

Class UserModel {
Long pkid;
String name;
public UserModel() {
this.pkid = new Long(1001);
this.name = "ABC";
}
}

现在我已将其转换为 json:

UserModel usrObj = new UserModel();
Gson gson = new Gson();
String json = gson.toJson(userObj);

所以我的 json 字符串现在是这样的:

{  "pkid": 1001,
    "name": "ABC" }

但我需要将 json 创建为

{"com.vlee.ejb.UserModel": [
{  "pkid": 1001,
    "name": "ABC" } ] }

我可以轻松地创建一个像这样的 json:

{"userModel": [
{  "pkid": 1001,
        "name": "ABC" } ] }

当我遇到使用点创建索引的问题时。

我不确定如何添加密钥"com.vlee.ejb.UserModel"

【问题讨论】:

    标签: android json gson datamodel


    【解决方案1】:
        UserModel userObj = new UserModel();
        HashMap map = new HashMap();
        ArrayList array = new ArrayList();
        array.add(userObj);
        map.put(userObj.getClass().getName(), array);
        Gson gson = new Gson();
        String json = gson.toJson(map);
        System.out.println(json);
    

    它输出: {"com.vlee.ejb.UserModel":[{"pkid":1001,"name":"ABC"}]}

    【讨论】:

    • 如果您只需要输出它们,这肯定会更容易。如果您需要 gson 来反序列化对象,它会稍微复杂一些,但即使不编写反序列化器类也应该是可行的。
    【解决方案2】:

    创建一个serializer 类来自定义输出。这可能涉及创建和安排一些JsonElement 子类实例。在这种情况下,您将创建一个 JsonObject,并将 JsonArray 作为其值之一,该 JsonObject 又包含一个 JsonObject,其中包含“pkid”和“name”内容。

    假设您希望能够重新读取这些对象,同一个类也可以实现反序列化接口,在这种情况下,它会被赋予一个 JsonElement 实例,并且必须将其分离以构造所需的 Java 对象.

    【讨论】:

    • 你是对的。当我创建像“userMode”这样的索引时,没关系。但我面临创建像“com.vlee.ejb.UserModel”这样的索引的问题。因为我不能用点声明一个类的变量。
    • 你不需要这样做,JsonObject 类可以像 Java Map 一样使用。您的序列化方法需要使用add 方法来放入数组。
    猜你喜欢
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2017-10-19
    • 2019-10-11
    • 1970-01-01
    • 2016-05-16
    • 2017-04-30
    相关资源
    最近更新 更多