在Java中,将带有数组的json字符串转换为平面键的最佳方法
我有一个JSON文件,其结构如下在Java中,将带有数组的json字符串转换为平面键的最佳方法,java,json,Java,Json,我有一个JSON文件,其结构如下 [ { "type":[ "blog", "article", "pressrelease" ], "states":[ "scheduled", "published" ], "roles":[ "editor", "admin" ], "
[
{
"type":[
"blog",
"article",
"pressrelease"
],
"states":[
"scheduled",
"published"
],
"roles":[
"editor",
"admin"
],
"actions":[
"review",
"delete"
]
},
{
"type":[
"blog",
"article",
"pressrelease"
],
"states":[
"draft",
"review"
],
"roles":[
"editor",
"admin"
],
"actions":[
"submit",
"delete"
]
},
{
"type":[
"blog",
"article"
],
"states":[
"draft",
"review"
],
"roles":[
"author"
],
"actions":[
"submit"
]
},
{
"type":[
"pressrelease"
],
"states":[
"draft",
"review"
],
"roles":[
"pr",
"prm"
],
"actions":[
"submit"
]
},
{
"type":[
"pressrelease"
],
"states":[
"scheduled",
"published"
],
"roles":[
"prm"
],
"actions":[
"review",
"delete"
]
}
]
我需要为给定场景编写一个方法,该方法将根据上述json返回操作,如
getActions(type, state, role){
}
我计划使用GSON将json转换为Action类对象列表,然后通过使用少量for循环处理json来构建一个静态映射,其中key为type.state.role,value为Action列表。
我的地图会有
"blog.scheduled.editor" : ["review", "delete"]
"blog.scheduled.admin" : ["review", "delete"]
"blog.published.editor" : ["review", "delete"]
因此,在getActionas方法中,我可以通过从输入值创建一个键来轻松返回操作
我不确定这是否是正确的实现,或者是否有实用程序可以完成这项工作。您的思路是正确的,但我建议使用树而不是地图,因为它是此类数据更自然的表示形式 按如下方式构建您的树:
* [Root]
|___ blog
| |___ published
| | |___ editor
| | | |___ review
| | | |___ delete
| | |
| | |___ admin
| | | |___ review
| | | |___ delete
| | |
| |
| |___ scheduled
| | |___ admin
| | | |___ delete
| | | |___ review
| | |
| | |___ editor
| | | |___ review
| | | |___ delete
| | |
| |
|
|___ pressrelease
| |___ scheduled
| | |___ admin
| | | |___ delete
| | | |___ review
(I spend far too much time on that ASCII tree ...)
然后,您可以从一个节点走到另一个节点,然后检查子节点
通过这种方式,您还可以检查博客条目上可能出现的状态,并且(如果您以不同的方式重新排序或创建树),您可以检查管理员可以对文章执行的操作。数据结构应该是一棵树。我不想为GSON操心,因为您必须完全匹配JSON的结构才能使其工作。使用能够解析文档并允许您访问所有元素的
org.json
-库(或类似库)。使用Jackson ObjectMapper反序列化原始数据(因此仅列出和映射)-->。如果需要,还可以使用它使用完整的数据绑定进行反序列化(但需要编写精确的映射类)
* [Root]
|___ blog
| |___ published
| | |___ editor
| | | |___ review
| | | |___ delete
| | |
| | |___ admin
| | | |___ review
| | | |___ delete
| | |
| |
| |___ scheduled
| | |___ admin
| | | |___ delete
| | | |___ review
| | |
| | |___ editor
| | | |___ review
| | | |___ delete
| | |
| |
|
|___ pressrelease
| |___ scheduled
| | |___ admin
| | | |___ delete
| | | |___ review
(I spend far too much time on that ASCII tree ...)