Json 文件具有相同键值时如何使用 HashMap
How to use HashMap when Json file has same key value
我的 json 文件看起来像这样 [实际上它还有更多,例如我只是放了 2 个块]
[{
"answerValue": "2021-02-01",
"parentId": "Policy",
"instance": 1,
"fieldId": "PolicyEffectiveDate"
},
{
"answerValue": "2012",
"parentId": "Insured",
"instance": 1,
"fieldId": "DateBusinessStarted"
}
]
我想将它们存储在一个 HashMap 中并打印它们。
public void MapCheck() {
Map<String, Object> dataMap = new HashMap<>();
List<Map> lstMap = new ArrayList<>();
dataMap.put("answerValue:", "2021-02-01");
dataMap.put("parentId:", "Policy");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "PolicyEffectiveDate");
lstMap.add(dataMap);
dataMap.put("answerValue:", "Assurestart LLC");
dataMap.put("parentId:", "Insured");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "Business_Name");
lstMap.add(dataMap);
System.out.println(lstMap);
}
public static void main(String[] args) {
Test t = new Test();
t.MapCheck();
}
}
预期:我希望它打印出来
[{parentId:=Policy, fieldId:=PolicyEffectiveDate, answerValue:=2021-02-01, instance:=1}, {parentId:=Insured, fieldId:=Business_Name, answerValue:=Assurestart LLC, instance:=1}]
实际:正在打印,最后一次值两次。
[{parentId:=Insured, fieldId:=Business_Name, answerValue:=Assurestart LLC, instance:=1}, {parentId:=Insured, fieldId:=Business_Name, answerValue:=Assurestart LLC, instance:=1}]
如何让它打印两个不同的值?预先感谢您的时间和想法。
您应该为列表中的第二张地图创建一张新地图:
Map<String, Object> dataMap = new HashMap<>();
List<Map<String, Object>> lstMap = new ArrayList<>();
dataMap.put("answerValue:", "2021-02-01");
dataMap.put("parentId:", "Policy");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "PolicyEffectiveDate");
lstMap.add(dataMap);
dataMap = new HashMap<>(); // create a new map!
dataMap.put("answerValue:", "Assurestart LLC");
dataMap.put("parentId:", "Insured");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "Business_Name");
lstMap.add(dataMap);
也就是说,如果你真的想生成JSON,或者读取一个JSON文件,我推荐使用JSON serialisation/deserialisation库,比如GSON。这样,您就可以不将数据表示为哈希映射,而是像这样的 class:
class MyObject {
private String answerValue;
private String parentId;
private int instance;
private String fieldId;
// getters & setters...
}
如您所知,HashMap 是一种基于唯一键和值对 属性 工作的数据结构。
在上面的示例中,当您执行 dataMap.put("answerValue:", "2021-02-01");它将此键的值保存在 HashMap 中。但是,当您执行时,dataMap.put("answerValue:", "Assurestart LLC");第二次,它将覆盖“answerValue:”键的值,因为它已经存在。
更好的方法是创建一个新的 class 来包含所有这些数据,然后您可以决定一个唯一的键来存储这些数据。因此您的值将是一个包含的对象这整个数据块。
例如,
public class MyData {
private String answerValue;
private String parentId;
private Integer instance;
private String fieldId;
//Setters and getters
...
}
您应该为第二个条目创建一个新映射,而不是覆盖第一个条目的值。添加
dataMap = new HashMap<>();
将第一个条目添加到列表后。
我的 json 文件看起来像这样 [实际上它还有更多,例如我只是放了 2 个块]
[{
"answerValue": "2021-02-01",
"parentId": "Policy",
"instance": 1,
"fieldId": "PolicyEffectiveDate"
},
{
"answerValue": "2012",
"parentId": "Insured",
"instance": 1,
"fieldId": "DateBusinessStarted"
}
]
我想将它们存储在一个 HashMap 中并打印它们。
public void MapCheck() {
Map<String, Object> dataMap = new HashMap<>();
List<Map> lstMap = new ArrayList<>();
dataMap.put("answerValue:", "2021-02-01");
dataMap.put("parentId:", "Policy");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "PolicyEffectiveDate");
lstMap.add(dataMap);
dataMap.put("answerValue:", "Assurestart LLC");
dataMap.put("parentId:", "Insured");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "Business_Name");
lstMap.add(dataMap);
System.out.println(lstMap);
}
public static void main(String[] args) {
Test t = new Test();
t.MapCheck();
}
}
预期:我希望它打印出来
[{parentId:=Policy, fieldId:=PolicyEffectiveDate, answerValue:=2021-02-01, instance:=1}, {parentId:=Insured, fieldId:=Business_Name, answerValue:=Assurestart LLC, instance:=1}]
实际:正在打印,最后一次值两次。
[{parentId:=Insured, fieldId:=Business_Name, answerValue:=Assurestart LLC, instance:=1}, {parentId:=Insured, fieldId:=Business_Name, answerValue:=Assurestart LLC, instance:=1}]
如何让它打印两个不同的值?预先感谢您的时间和想法。
您应该为列表中的第二张地图创建一张新地图:
Map<String, Object> dataMap = new HashMap<>();
List<Map<String, Object>> lstMap = new ArrayList<>();
dataMap.put("answerValue:", "2021-02-01");
dataMap.put("parentId:", "Policy");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "PolicyEffectiveDate");
lstMap.add(dataMap);
dataMap = new HashMap<>(); // create a new map!
dataMap.put("answerValue:", "Assurestart LLC");
dataMap.put("parentId:", "Insured");
dataMap.put("instance:", 1);
dataMap.put("fieldId:", "Business_Name");
lstMap.add(dataMap);
也就是说,如果你真的想生成JSON,或者读取一个JSON文件,我推荐使用JSON serialisation/deserialisation库,比如GSON。这样,您就可以不将数据表示为哈希映射,而是像这样的 class:
class MyObject {
private String answerValue;
private String parentId;
private int instance;
private String fieldId;
// getters & setters...
}
如您所知,HashMap 是一种基于唯一键和值对 属性 工作的数据结构。 在上面的示例中,当您执行 dataMap.put("answerValue:", "2021-02-01");它将此键的值保存在 HashMap 中。但是,当您执行时,dataMap.put("answerValue:", "Assurestart LLC");第二次,它将覆盖“answerValue:”键的值,因为它已经存在。
更好的方法是创建一个新的 class 来包含所有这些数据,然后您可以决定一个唯一的键来存储这些数据。因此您的值将是一个包含的对象这整个数据块。 例如,
public class MyData {
private String answerValue;
private String parentId;
private Integer instance;
private String fieldId;
//Setters and getters
...
}
您应该为第二个条目创建一个新映射,而不是覆盖第一个条目的值。添加
dataMap = new HashMap<>();
将第一个条目添加到列表后。