【发布时间】:2012-06-13 22:14:22
【问题描述】:
我目前在使用 groovy JsonBuilder 时遇到问题:我尝试序列化的对象的属性似乎以随机顺序出现。
这是对象的类:
class Game {
String title
String gameImg2
String description
}
这是我一直在使用的代码:
def game = new Game(title: "a game", gameImg2: "an image", description: "desc")
def json = new JsonBuilder(game)
据此,我希望输出是:
{"title":"a game","gameImg2":"an image", "description":"desc"}
但相反,我得到:
{"gameImg2":"gameImg","title":"hello","description":"desc"}.
从JsonBuilder example code来看,似乎应该保持顺序,实际上,看起来toJson方法迭代了object.properties,它是一个LinkedHashMap。我原以为这会按照它们在类中声明的顺序遍历属性。
我最好的猜测是,这与我对游戏对象的初始化有关 - 可以使用 Map 语法以某种方式分配属性,但同样,这似乎创建了一个应该保持顺序的 LinkedHashMap。
有没有人知道我在这里做错了什么或错误假设?任何线索都会有很大帮助!
【问题讨论】:
-
订单重要吗? JSON 对象没有排序,是吗? (我不知道,我在问。)
-
[JSON.org] 声明 一个对象是一组无序的名称/值对,没有任何 JSON 解析器值得盐分依赖于特定的顺序。
-
@DaveNewton 你是对的,JSON 对象不保证任何迭代顺序(与 JavaScript 对象相同)。来自json.org:“object 是一组无序的名称/值对”。