gpt4 book ai didi

Java JSON写入jsonarray循环

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:59 26 4
gpt4 key购买 nike

我正在尝试使用以下代码写入 json 文件:

    JSONObject obj = new JSONObject();
JSONArray dlist = new JSONArray();
JSONObject data = new JSONObject();
//Data
data.put("path", gamePath);
data.put("lastprofile", profileList.getSelectedValue());
dlist.add(data);

obj.put("data", dlist);

//Profiles
JSONArray profileList = new JSONArray(); //profiles list
JSONObject profileListObj = new JSONObject(); //profiles
JSONArray profileDataList = new JSONArray(); //profile data list
JSONObject profileData = new JSONObject(); //profile data

//We now have to cycle every profile and create the data, then add it to the list.
for(int i=profiles.size()-1; i>=0; i--) {
Profile p = profiles.get(i);
profileData.put("name", p.name);
profileData.put("mods", p.mods.toString());
System.out.println(p.name + "..." + p.mods.toString());
profileDataList.add(profileData);
System.out.println("list.." + profileDataList.toString());
profileListObj.put("profile"+i, profileDataList);
//obj.put("profile"+i, profileDataList);

//profileList.add(profileListObj);
//profileListObj.clear();
//profileDataList.clear();
//profileData.clear();
}
//profileList.add(profileListObj);
obj.put("profiles", profileDataList);

问题是什么,你可以看到我修改过的一些注释掉的行。整个数组最终将保存为最后一个对象配置文件。

我想要的是:

profiles 
-profile1
--data
--data
-profile2
--data
--data etc,

这是使用上面的示例代码生成的结果。

{
"data" : [{
"path" : "tempPath",
"lastprofile" : "Profile1"
}
],
"profiles" : [{
"name" : "Profile1", //This one is correct
"mods" : "[base, mcconfig, mcconfig-startbonus]"
}, {
"name" : "Profile1", //This one should be profile2
"mods" : "[base, mcconfig, mcconfig-startbonus]" //different mods...
}, {
"name" : "Profile1", //this one should be profile3
"mods" : "[base, mcconfig, mcconfig-startbonus]" //different mods...
}, {
"name" : "Profile1",
"mods" : "[base, mcconfig, mcconfig-startbonus]"
}, {
"name" : "Profile1",
"mods" : "[base, mcconfig, mcconfig-startbonus]"
}
]
}

我已经修改了多个注释掉的行,尽可能使所有数据正确,只是没有组织在配置文件中。我试图让它尽可能干净,以便有组织。

我得出的结论是,我无法将具有相同 key 的内容放入 profileData 中。因此,它将第一个输入重新添加到 profileDataList 中,并继续此后的每个循环。

更多信息:每个 profileData 名称和 mods 都有不同的字符串。有 5 种不同的配置文件。配置文件应命名为 profile,并在其后添加相应的编号,Inside ofprofiles。

最佳答案

当您执行 profileData.put("name", p.name); 时,您将覆盖同一个对象,因此最终您将拥有一个包含对同一对象的 3 个引用的数组。要修复它,请在循环内创建一个新实例(请参阅注释):

for(int i=profiles.size()-1; i>=0; i--) {
Profile p = profiles.get(i);
profileData = new JsonObject(); // <- create a new object in each iteration
profileData.put("name", p.name);
profileData.put("mods", p.mods.toString());
System.out.println(p.name + "..." + p.mods.toString());
profileDataList.add(profileData);
System.out.println("list.." + profileDataList.toString());
profileListObj.put("profile"+i, profileDataList); // Is this really needed?
}
//profileList.add(profileListObj);
obj.put("profiles", profileDataList);

关于Java JSON写入jsonarray循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25089755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com