java - 使用重复键解析 json
问题描述
我正在尝试解析包含 java 中重复键的 Json 文件。我正在使用此答案中建议的方法Parsing a json which contains duplicate keys。如果我对 Json 进行硬编码,则该方法可以正常工作,但如果我从文件中读取它,则只会读取最后一个重复键。请帮助,因为我想从文件中读取 Json。提前致谢。代码:
public class am {
public static void main(String args[]) throws Exception
{
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("sample.json"));
JSONObject a=JSONObject.fromObject(obj);
JSONObject jsonObject=JSONObject.fromObject("{\n" +
" \"Data\": {\n" +
" \"A\": {\n" +
" \"B\": {\n" +
" \"C\": \"c\",\n" +
" \"D\": {}\n" +
" },\n" +
" \"E\": {\n" +
" \"F\": \"f\"\n" +
" },\n" +
" \"G\": {\n" +
" \"H\": \"h\"\n" +
" }\n" +
" },\"A\": {\n" +
" \"B\": {\n" +
" \"C\": \"x\",\n" +
" \"D\": {}\n" +
" },\n" +
" \"E\": {\n" +
" \"F\": \"y\"\n" +
" },\n" +
" \"G\": {\n" +
" \"H\": \"z\"\n" +
" }\n" +
" },\n" +
"
"\n" +
" }\n" +
"}");
System.out.println("Json objects are:::"+a);
System.out.println("Json objects are:::"+jsonObject);
}
}
json文件:
{
"Data": {
"A": {
"B": {
"C": "c",
"D": {}
},
"E": {
"F": "f"
},
"G": {
"H": "h"
}
},"A": {
"B": {
"C": "x",
"D": {}
},
"E": {
"F": "y"
},
"G": {
"H": "z"
}
},
}
}
输出:
Json objects are:::{"Data":{"A":{"B":{"C":"x","D":{}},"E":{"F":"y"},"G":{"H":"z"}}}}
Json objects are:::{"Data":{"A":[{"B":{"C":"c","D":{}},"E":{"F":"f"},"G":{"H":"h"}},{"B":{"C":"x","D":{}},"E":{"F":"y"},"G":{"H":"z"}}]}}
解决方案
如果您没有限制使用外部 JSON 库而不是可以net.sf.json.JSONObject
用来解析 JSON 字符串,它将接受带有重复键的 JSON。它将通过将重复值存储到数组中来保留它们。
JSONObject jsonObject = JSONObject.fromObject( "{\"Data\": {\"A\": {\"B\": {\"C\": \"c\",\"D\": {}},\"E\": {\"F\": \"f\"},\"G\": {\"H\": \"h\"}},\"A\": {\"B\": {\"C\": \"x\",\"D\": {}},\"E\": {\"F\": \"y\"},\"G\": {\"H\": \"z\"}}}}" );
System.out.println( "net.sf.json.JSONObject: " + jsonObject );
推荐阅读
- python - 如何计算两个不同形状的numpy数组之间的距离以进行KNN实现
- python - 比较 if 语句中的 2 个输入
- vba - VBA循环计数器不添加非整数
- r - 为什么 R 在解析绘图参数时表现不同?
- mips - 在流水线处理器设计中,为什么寄存器文件读/写在半个周期内执行?
- r - 创建现有类别的新分组并汇总新组
- tensorflow - Keras ImageDataGenerator:PIL.UnidentifiedImageError
- java - java - 将毫秒转换为本地时间
- django - 如何在 django 中获取医生预约的时间段
- arduino - 使用 ESP32 网络服务器下载文件时面临问题