java - 添加到 Json 数组时数据被覆盖
问题描述
我有来自 Splunk 的数据,这些数据是带有端口的主机,有些主机有多个端口。所以我做了下面的逻辑。对于我添加到 jsonarray 的每个具有单个端口的主机。问题是端口总是在它添加到jsonarray的那一刻被覆盖我无法弄清楚为什么?
public JSONObject parse_OS_Vuln_data_to_Json() {
JSONObject responseDetailsJson = new JSONObject();
JSONArray jsonArray = new JSONArray();
if (list_of_OS_VulnerabilityOS.size()>0)
{
for (int i = 0; i < list_of_OS_VulnerabilityOS.size(); i++) {
JSONObject formDetailsJson = new JSONObject();
if (list_of_OS_VulnerabilityOS.get(i).getList_of_ports().size() > 1)
{
for (int v = 0; v < list_of_OS_VulnerabilityOS.get(i).getList_of_ports().size(); v++)
{
formDetailsJson.put("host", list_of_OS_VulnerabilityOS.get(i).getDest());
formDetailsJson.put("port", list_of_OS_VulnerabilityOS.get(i).getList_of_ports().get(v)); // i got each time different port
formDetailsJson.put("open", list_of_OS_VulnerabilityOS.get(i).isOpen());
formDetailsJson.put("info", list_of_OS_VulnerabilityOS.get(i).getInfo());
jsonArray.add(formDetailsJson); // here it overwrites to the first port again
total_hostNumber_OS++;
}
} else {
formDetailsJson.put("host", list_of_OS_VulnerabilityOS.get(i).getDest());
formDetailsJson.put("port", list_of_OS_VulnerabilityOS.get(i).getPorts___port());
formDetailsJson.put("open", list_of_OS_VulnerabilityOS.get(i).isOpen());
formDetailsJson.put("info", list_of_OS_VulnerabilityOS.get(i).getInfo());
jsonArray.add(formDetailsJson);
total_hostNumber_OS++;
}
}
responseDetailsJson.put("data", jsonArray);
System.out.print("\n list size: " + list_of_OS_VulnerabilityOS.size());
System.out.print("\n total of OS-host to be send : " + total_hostNumber_OS);
}
return responseDetailsJson;
}```
解决方案
public JSONObject parse_OS_Vuln_data_to_Json() {
JSONObject responseDetailsJson = new JSONObject();
JSONArray jsonArray = new JSONArray();
if (list_of_OS_VulnerabilityOS.size()>0)
{
for (int i = 0; i < list_of_OS_VulnerabilityOS.size(); i++) {
JSONObject formDetailsJson = null; // change #1
if (list_of_OS_VulnerabilityOS.get(i).getList_of_ports().size() > 1)
{
for (int v = 0; v < list_of_OS_VulnerabilityOS.get(i).getList_of_ports().size(); v++)
{
formDetailsJson = new JSONObject(); // change #2
formDetailsJson.put("host", list_of_OS_VulnerabilityOS.get(i).getDest());
formDetailsJson.put("port", list_of_OS_VulnerabilityOS.get(i).getList_of_ports().get(v)); // i got each time different port
formDetailsJson.put("open", list_of_OS_VulnerabilityOS.get(i).isOpen());
formDetailsJson.put("info", list_of_OS_VulnerabilityOS.get(i).getInfo());
jsonArray.add(formDetailsJson); // here it overwrites to the first port again
total_hostNumber_OS++;
}
} else {
formDetailsJson = new JSONObject(); // change #3
formDetailsJson.put("host", list_of_OS_VulnerabilityOS.get(i).getDest());
formDetailsJson.put("port", list_of_OS_VulnerabilityOS.get(i).getPorts___port());
formDetailsJson.put("open", list_of_OS_VulnerabilityOS.get(i).isOpen());
formDetailsJson.put("info", list_of_OS_VulnerabilityOS.get(i).getInfo());
jsonArray.add(formDetailsJson);
total_hostNumber_OS++;
}
}
responseDetailsJson.put("data", jsonArray);
System.out.print("\n list size: " + list_of_OS_VulnerabilityOS.size());
System.out.print("\n total of OS-host to be send : " + total_hostNumber_OS);
}
return responseDetailsJson;
}
在 #2 for 循环中,您使用的是相同的 formDetailsJson 对象。因此,每次循环运行时,您的 formDetailsJson 对象都会被覆盖。
推荐阅读
- reactjs - 设计模式:以何种方式在 DB 中构建表:将网站上的文章的访问权限限制为仅订阅用户?
- apache-kafka - 从命令提示符启动 Kafka 消费者时,我收到 Class Not Found Exception。我该如何解决这个问题?
- javascript - Vuejs在下拉列表中获取数组下的数组
- javascript - Jquery datepicker beforeShowDay 仍然可以点击,即使所有天都应该已经不可选择
- groovy - 我想要一个自定义 JQL 函数来为 Jira 中的 nfeed 字段创建子查询(通过Adaptavist scriptrunner)。有任何想法吗?
- python - 如何按元素组合两个列表列表?
- node.js - 访问端点 URL 时浏览器发出什么 HTTP 请求?
- python - PyTorch CNN 教程的混淆矩阵和测试精度
- angular - Angular 9 - HttpInterceptor - 无法读取 null 的属性长度
- c# - 流媒体和阅读器无法读取目录中的文件夹和文件