附加列表会导致空的JSON数组?

时间:2017-07-28 09:58:03

标签: java json

我一直在玩org.json库。我试图将一个Enum类型列表附加到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

有什么想法吗?

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

1 个答案:

答案 0 :(得分:0)

由于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的集合内置函数)