,所以我終於閱讀了多個JSON對象和數組的工作,在幫助(不能發佈,因爲聲譽...)但我遇到了一個問題..我似乎無法輸出我所做的更改(設置對象的值)。我只能輸出更改。不在我讀取的文件中設置更改,然後輸出包含更改的文件。Java Json - 閱讀文件,編輯文件值,然後保存新的編輯
而且我使用這個庫(請使用它,如果你想幫助):https://mega.co.nz/#!LIkQ1Lwa!Jz0S1zdgYHzcpxpd2spmXxhAxu564Wrp0dUChqnDARU
這裏是我的代碼。 (這可能是混亂的,但它適用於這種無聊的JSON Java的東西。)
try {
BufferedReader in = new BufferedReader(new InputStreamReader(ModBox.class.getResourceAsStream("/info/lynxaa/modbox/res/tunables.json")));
String line;
String out = "";
while ((line = in.readLine()) != null) {
out += line;
}
in.close();
JsonObject object = JsonObject.readFrom(out);
JsonObject ssObj = object.get("tunables").asObject();
JsonObject sssObj = ssObj.get("MP_GLOBAL").asObject();
JsonArray array = null;
//Fields we want to modify
String[] arrayObjects = {
"CARMOD_SHOP_MULTIPLIER",
"CLOTHES_SHOP_MULTIPLIER",
"HAIRDO_SHOP_MULTIPLIER",
"TATTOO_SHOP_MULTIPLIER",
"WEAPONS_SHOP_MULTIPLIER",
"CARS_WEBSITE_MULTIPLIER",
"PLANES_WEBSITE_MULTIPLIER",
"HELIS_WEBSITE_MULTIPLIER",
"BOATS_WEBSITE_MULTIPLIER",
"BIKES_WEBSITE_MULTIPLIER",
"XP_MULTIPLIER",
"CASH_MULTIPLIER",
"MAX_CASH_GIFT_LIMIT",
"MAX_HEALTH_MULTIPLIER",
"MIN_HEALTH_MULTIPLIER",
"HEALTH_REGEN_RATE_MULTIPLIER",
"HEALTH_REGEN_MAX_MULTIPLIER",
"MAX_ARMOR_MULTIPLIER"
};
final String DIR_ = System.getProperty("user.home") + File.separator + "Desktop" + File.separator + "MODBOX" + File.separator;
File output = new File(DIR_ + "gta_v_modbox_json" + new Random().nextInt(999) + ".json");
output.getParentFile().mkdirs();
output.createNewFile();
if (output.exists()) {
textArea.append("Created MODBOX files: " + output.getAbsolutePath() + "\n");
}
for (String objects : arrayObjects) {
array = sssObj.get(objects).asArray();
}
if (array == null) {
textArea.append("Error! Json Array outputted null.");
return;
}
for (JsonValue value : array.values()) {
double mvalue = value.asObject().get("value").asDouble();
for (String objss : arrayObjects) {
textArea.append(objss + ":" + mvalue + "\n");
for (Component component : tabMain.getComponents()) {
if (component instanceof JTextField) {
JTextField field = ((JTextField) component);
if (field.getName() == objss) {
textArea.append("Found match for: " + field.getName());
textArea.append("Setting value of: " + field.getName() + " to: " + Double.parseDouble(field.getText()));
value.asObject().add(objss, Double.parseDouble(field.getText()));
FileWriter fw = new FileWriter(output.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
value.writeTo(bw);
bw.close();
break;
}
}
}
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
而每一次我保存文件時,這得到輸出:
{ 「值」:1, 「XP_MULTIPLIER 「:100, 「CASH_MULTIPLIER」:50, 「MAX_HEALTH_MULTIPLIER」:10000, 「MIN_HEALTH_MULTIPLIER」:10000, 「HEALTH_REGEN_RATE_MULTIPLIER」:10, 「MAX_ARMOR_MULTIPLIER」:10000 }
而不是編輯我讀取的實際文件。
這裏找到: https://mega.co.nz/#!GMUC3ZqT!JsvNEG5FEKTMsIhlDJdNjHyH7714qH199WmcTxdVO-E
爲什麼不使用jackson並使用它的ObjectMapper並且只能使用POJO。它會更簡單,除了傑克遜可以爲你做大部分文件處理。 –
我完全不熟悉java的整個json,並且在嘗試4天后僅在4小時前正確工作。我多次嘗試傑克遜,它從來沒有爲我工作。你介意提供一個讀取對象和數組,設置值並保存的例子嗎? – Lynxaa
我會在稍後提供 –