构建此 JSON 数据的更好方法?
Better way to structure this JSON data?
所以我正在使用 Firebase 和 JavaScript 制作 2D 游戏,这是保存文件的一部分。他们使用 JSON 来存储数据。
{
"player" : {
"github:123123" : {
"email" : "tester@gmail.com",
"inventory" : {
"slot_1" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_10" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_11" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_12" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_13" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_14" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_15" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_16" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_17" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_18" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_19" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_2" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_20" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_3" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_4" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_5" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_6" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_7" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_8" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_9" : {
"item_id" : 0,
"item_qty" : 0
}
},
"lowercase" : "test",
"map" : 1,
"member_level" : 2,
"signed_up" : 1437261263536,
"uid" : "github:616320",
"username" : "Test",
"version" : "1.0.0",
"x" : 50,
"y" : 20
}
}
}
如您所见,问题在于 inventory
的结构。有没有更好的方法来构建它更好更整洁?我已经阅读了 Firebase 上的 Structuring Data 文档,但非常感谢您的意见。
这不仅适用于库存,还适用于银行以及游戏中需要大量物品插槽的任何地方。
谢谢。
嗯。您的版本应该可以工作,但我建议采用以下结构:
{
"email" : "tester@gmail.com",
"inventory" : [{
"id": 0,
"amount": 0
},{
"id": 0,
"amount": 0
},{
"id": 0,
"amount": 0
},{
"id": 0,
"amount": 0
}],
"lowercase" : "test",
"map" : 1,
"memberLevel" : 2,
"signedUp" : 1437261263536,
"uid" : "github:616320",
"username" : "Test",
"version" : "1.0.0",
"x" : 50,
"y" : 20
}
推理:
- 在 JS 中,驼峰式大小写是大多数项目的默认设置,因此我也会在这里使用它。
- 您不需要玩家属性和 github:* 属性,如果它们是唯一的。将 JSON 保存到玩家的数据库中,并为每个玩家保留一个 JSON。
- 您的库存数据结构似乎更适合数组,因为您基本上使用了每个插槽(如果没有,它就是空的)并希望通过插槽 ID 访问它。
- 如果您描述的子对象在清单数组中,则无需调用每个 属性 项目,因为这是显而易见的。
所以我正在使用 Firebase 和 JavaScript 制作 2D 游戏,这是保存文件的一部分。他们使用 JSON 来存储数据。
{
"player" : {
"github:123123" : {
"email" : "tester@gmail.com",
"inventory" : {
"slot_1" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_10" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_11" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_12" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_13" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_14" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_15" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_16" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_17" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_18" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_19" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_2" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_20" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_3" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_4" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_5" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_6" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_7" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_8" : {
"item_id" : 0,
"item_qty" : 0
},
"slot_9" : {
"item_id" : 0,
"item_qty" : 0
}
},
"lowercase" : "test",
"map" : 1,
"member_level" : 2,
"signed_up" : 1437261263536,
"uid" : "github:616320",
"username" : "Test",
"version" : "1.0.0",
"x" : 50,
"y" : 20
}
}
}
如您所见,问题在于 inventory
的结构。有没有更好的方法来构建它更好更整洁?我已经阅读了 Firebase 上的 Structuring Data 文档,但非常感谢您的意见。
这不仅适用于库存,还适用于银行以及游戏中需要大量物品插槽的任何地方。
谢谢。
嗯。您的版本应该可以工作,但我建议采用以下结构:
{
"email" : "tester@gmail.com",
"inventory" : [{
"id": 0,
"amount": 0
},{
"id": 0,
"amount": 0
},{
"id": 0,
"amount": 0
},{
"id": 0,
"amount": 0
}],
"lowercase" : "test",
"map" : 1,
"memberLevel" : 2,
"signedUp" : 1437261263536,
"uid" : "github:616320",
"username" : "Test",
"version" : "1.0.0",
"x" : 50,
"y" : 20
}
推理:
- 在 JS 中,驼峰式大小写是大多数项目的默认设置,因此我也会在这里使用它。
- 您不需要玩家属性和 github:* 属性,如果它们是唯一的。将 JSON 保存到玩家的数据库中,并为每个玩家保留一个 JSON。
- 您的库存数据结构似乎更适合数组,因为您基本上使用了每个插槽(如果没有,它就是空的)并希望通过插槽 ID 访问它。
- 如果您描述的子对象在清单数组中,则无需调用每个 属性 项目,因为这是显而易见的。