JSON:项目顺序

时间:2015-02-25 09:39:44

标签: java json

我正在使用一个servlet,它通过URL返回JSONArray的JSONObject:

http://myserver.corp:8080/webtools/myServlet?targetDB=myTargetDB&sqlStatement=myStatement&param0=abc

输出:

[
    {
        "attribute1": "value1",
        "attribute2": "value2",
        "attribute3": "value3",
        "attribute4": "value4",
    }
]

现在这就像魅力一样,直到我发现订单属性因我推出的环境而异。

当我在Eclipse中启动程序时,我得到了上面的结果 - 但是当以可运行的JAR启动程序时,顺序颠倒了(attribute4到attribute1)。

现在我明白JSONObjects没有订购。但是必须有一个原因可以解决JSONObjects中属性顺序的反转。

有没有人有想法?

干杯, 添

3 个答案:

答案 0 :(得分:1)

来自http://json.org(我的重点):

  

对象是一组无序名称/值对。

所以这个

{ "foo": 1, "bar": 2 }

和这个

{ "bar": 2, "foo": 1 }

相同的对象。任何正在寻找订单的库都在寻找可以存在和不存在的东西。代码可以按任意顺序输出JSON对象。

答案 1 :(得分:0)

重复:JSONObject : Why JSONObject changing the order of attributes

如果你使用Jackson,你可以在课堂上订购字段,如果你的对象是Java POJO

@JsonPropertyOrder({ "attribute1", "attribute2", "attribute3"})
public class Attributes { ... }

答案 2 :(得分:0)

要解决此问题:

上课JSONObject
关于方法:public JSONObject()
更改this.map = new LinkedHashMap();

LinkedHashMap将按照将条目放入地图的顺序进行迭代

/**
     * Construct an empty JSONObject.
     */
    public JSONObject() {
        this.map = new LinkedHashMap();
    }