Java 需要建议交换复杂json的键和值吗
我有下面的问题Java 需要建议交换复杂json的键和值吗,java,json,Java,Json,我有下面的问题 { "Roles":[ { "January":[ { "CN":[ "GoogleCnFeatureOwner", "GoogleCnAnalyst", "SupportAnalyst", "AdminCn"
{
"Roles":[
{
"January":[
{
"CN":[
"GoogleCnFeatureOwner",
"GoogleCnAnalyst",
"SupportAnalyst",
"AdminCn"
]
},
{
"EU":[
"GoogleEuFeatureOwner",
"GoogleEuAnalyst",
"SupportAnalyst",
"AdminEu"
]
},
{
"NA":[
"GoogleNaFeatureOwner",
"GoogleNaAnalyst",
"SupportAnalyst",
"AdminNa"
]
}
]
},
{
"February":[
{
"CN":[
"AbcCnFeatureOwner",
"AbcCnAnalyst",
"SupportAnalyst",
"AdminCn"
]
},
{
"EU":[
"AbcEuFeatureOwner",
"AbcEuAnalyst",
"SupportAnalyst",
"AdminEu"
]
},
{
"NA":[
"AbcNaFeatureOwner",
"AbcNaAnalyst",
"SupportAnalyst",
"AdminNa"
]
}
]
},
{
"March":[
{
"CN":[
"YahooCnFeatureOwner",
"SupportAnalyst",
"AdminCn",
"UserCn"
]
},
{
"NA":[
"YahooNaFeatureOwner",
"SupportAnalyst",
"AdminNa",
"UserNa"
]
}
]
}
]
}
我试图用java实现一个方法来解析上面的json,并用值交换键,创建一个集合json,如下所示
{
"WifiCnFeatureOwner": [{
"CN": ["January"]
}],
"ItSupportAnalyst": [{
"CN": ["January", "February", "March"]
}, {
"EU": ["January", "February"]
}, {
"NA": ["January", "February", "March"]
}]
}
我首先使用org.json API。
请提供一些最佳方法,以在没有番石榴BiMap的情况下有效实现转化。不管怎样,我会在完成后发布代码 我建议不要试图重新发明轮子。 您提到的所有您想做的事情都已经在开源库中完成了 使用Jackson或其他JSON解析器来执行JSON的初始解析。 使用番石榴BiMap获得双向映射,应该允许您交换键和值。 使用Jackson或其他废话创建新的JSON。 因为您使用的是org.json API,所以这里有一种方法 我故意没有完全完成您想要的输出,因此您必须理解代码才能修改它。下面的输出具有您想要的所有功能,但更简单 byte[]inputBytes=Files.readAllBytesPath.gettest.json; String inputText=新的StringinputBytes,StandardCharsets.US\u ASCII; JSONObject inputJson=新的JSONObject InputText; JSONObject outputJson=新的JSONObject; 对于对象monthObj:inputJson.getJSONArrayRoles{ JSONObject monthJson=JSONObject monthObj; 对于字符串monthName:monthJson.keySet{ 对于对象区域bj:monthJson.getJSONArraymonthName{ JSONObject regionJson=JSONObject RegionObject; 对于字符串regionCode:regionJson.keySet{ 对于对象roleObj:regionJson.getJSONArrayregionCode{ 字符串roleName=字符串roleObj; JSONObject role=outputJson.optJSONObject RoleName; 如果角色==null outputJson.putroleName,role=newJSONObject; JSONArray region=role.optJSONArrayregionCode; 如果区域==null role.putregionCode,region=新JSONArray; 普蒙特纳姆地区; } } } } } System.out.printlnoutputJson.toString3; 输出 手动重新格式化以提高可读性:
{
"AbcCnAnalyst": {
"CN": ["February"]
},
"AbcCnFeatureOwner": {
"CN": ["February"]
},
"AbcEuAnalyst": {
"EU": ["February"]
},
"AbcEuFeatureOwner": {
"EU": ["February"]
},
"AbcNaAnalyst": {
"NA": ["February"]
},
"AbcNaFeatureOwner": {
"NA": ["February"]
},
"AdminCn": {
"CN": ["January", "February", "March"]
},
"AdminEu": {
"EU": ["January", "February"]
},
"AdminNa": {
"NA": ["January", "February", "March"]
},
"GoogleCnAnalyst": {
"CN": ["January"]
},
"GoogleCnFeatureOwner": {
"CN": ["January"]
},
"GoogleEuAnalyst": {
"EU": ["January"]
},
"GoogleEuFeatureOwner": {
"EU": ["January"]
},
"GoogleNaAnalyst": {
"NA": ["January"]
},
"GoogleNaFeatureOwner": {
"NA": ["January"]
},
"SupportAnalyst": {
"EU": ["January", "February"],
"NA": ["January", "February", "March"],
"CN": ["January", "February", "March"]
},
"UserCn": {
"CN": ["March"]
},
"UserNa": {
"NA": ["March"]
},
"YahooCnFeatureOwner": {
"CN": ["March"]
},
"YahooNaFeatureOwner": {
"NA": ["March"]
}
}
{Region:CN,EU,NA}不是有效的JSON。你是说{地区:[CN,EU,NA]}吗?对不起,安德烈亚斯的打字错误。我已经更正了,你丢失了信息。SupportAnalyst将于1月和2月在所有3个区域中发布,但仅在其中两个区域的3月发布。您转换的数据无法指定。Andreas,谢谢。你说得对。我已经编辑了这个问题。请检查。@Green先生,对于您的问题,我的答案可能过于简单。现在看起来你不想反转贴图,你想反转一棵树。是的,DwB。我已经编辑了这个问题。请分享您的意见或建议。
{
"AbcCnAnalyst": {
"CN": ["February"]
},
"AbcCnFeatureOwner": {
"CN": ["February"]
},
"AbcEuAnalyst": {
"EU": ["February"]
},
"AbcEuFeatureOwner": {
"EU": ["February"]
},
"AbcNaAnalyst": {
"NA": ["February"]
},
"AbcNaFeatureOwner": {
"NA": ["February"]
},
"AdminCn": {
"CN": ["January", "February", "March"]
},
"AdminEu": {
"EU": ["January", "February"]
},
"AdminNa": {
"NA": ["January", "February", "March"]
},
"GoogleCnAnalyst": {
"CN": ["January"]
},
"GoogleCnFeatureOwner": {
"CN": ["January"]
},
"GoogleEuAnalyst": {
"EU": ["January"]
},
"GoogleEuFeatureOwner": {
"EU": ["January"]
},
"GoogleNaAnalyst": {
"NA": ["January"]
},
"GoogleNaFeatureOwner": {
"NA": ["January"]
},
"SupportAnalyst": {
"EU": ["January", "February"],
"NA": ["January", "February", "March"],
"CN": ["January", "February", "March"]
},
"UserCn": {
"CN": ["March"]
},
"UserNa": {
"NA": ["March"]
},
"YahooCnFeatureOwner": {
"CN": ["March"]
},
"YahooNaFeatureOwner": {
"NA": ["March"]
}
}