【问题标题】:Appending a list results in empty JSON array?附加列表会导致空 JSON 数组?
【发布时间】:2017-07-28 09:58:02
【问题描述】:

我一直在玩弄 org.json 库。我试图将枚举类型列表附加到 json 对象,但生成的 json 数组为空。这就是我的意思:

attribEffects 应该分别保存“HEALTH”和“AMMO”。

{"attr": [
    {
        "amount": [1000],
        "mult": [0],
        "attribId": [0],
        "time": [-1],
        "attribDesc": [null],
        "attribName": ["Health Buff (1000)(Debug)"],
        "attribEffects": [{}]
    },
    {
        "amount": [5],
        "mult": [0],
        "attribId": [1],
        "time": [5],
        "attribDesc": [null],
        "attribName": ["devgun_ammo"],
        "attribEffects": [{}]
    }
]}

这是我写给它的地方:

for(Attribute a : (List<Attribute>) l) {
                JSONObject j = new JSONObject();
                j.append("attribName", a.getAttribName());
                j.append("attribId", a.getAttribId());
                j.append("attribDesc", a.getAttribDesc());

                j.put("attribEffects", a.getEffects());

                for(Object o : a.getEffects()) 
                    System.out.println(o.toString());

//              j.append("attribEffects", a.getAffects()); //TODO: Debug me
                j.append("amount", a.getAmount());
                j.append("mult", a.getMult());
                j.append("time", a.getTime());

                root.append("attr", j);
}

用于验证的 System.out.println 的输出:

HEALTH
AMMO

有什么想法吗?

编辑: 我意识到为单个值创建一个数组是没有意义的,但我希望它可以扩展,以防单个事物具有多种效果

【问题讨论】:

  • 这不是完全重复,但它是同样的问题,谢谢,这实际上帮助了我。
  • 看来 JSONObject 不支持枚举
  • 据我所知,它不支持没有任何数据的枚举,是的。解决此问题的两种方法是获取枚举名称并将其保存为字符串,或提供枚举数据。我可能会使用枚举名称,因为无论如何这就是它在这种情况下的全部用途。

标签: java json


【解决方案1】:

由于 json.org 库过时且不受支持,因此放弃它可能是明智之举。然而,作为一个快速的解决方法,因为这不是一个严肃的项目, 现在这样做了:

for(Attribute a : (List<Attribute>) l) {
                JSONObject j = new JSONObject();
                j.append("attribName", a.getAttribName());
                j.append("attribId", a.getAttribId());
                j.append("attribDesc", a.getAttribDesc());

                JSONArray jar = new JSONArray();

                for(Object o : a.getAffects()) 
                    jar.put(o.toString()); //TODO Optimize and Time me

                j.put("attribEffects", jar);

                j.append("amount", a.getAmount());
                j.append("mult", a.getMult());
                j.append("time", a.getTime());

                root.append("attr", j);
            }

(注意:组装一个 JSONArray,填充它并附加它,而不是使用 JSONObject 的内置函数进行集合)

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 2021-01-05
    • 2012-09-28
    • 2023-03-15
    • 2013-10-31
    • 2019-01-01
    • 2022-01-11
    • 2017-08-23
    • 2012-08-22
    相关资源
    最近更新 更多