gpt4 book ai didi

Java:Gson更改属性名称而不序列化

转载 作者:行者123 更新时间:2023-11-30 03:14:25 25 4
gpt4 key购买 nike

是否可以在不使用 Gson 序列化的情况下更改 Json 属性的名称?例如,给定这个 Json

{
"1": {
...
},
"2": {
...
}
}

我可以将 "1" 更改为 "3" 而不删除其内容吗?我知道 addProperty 方法添加新属性,或用新值覆盖现有属性,但我想更改属性的名称而不影响其值。此外,将现有值粘贴为 addProperty 的第二个参数是不够的。

编辑:为了添加更多上下文,我将解释更大的情况。我有一个几千行长的 JSON 字符串。我正在编写一个利用 Gson 的程序来更改该 JSON 字符串中的值。我现在不仅想更改属性的值,还想更改属性本身的名称。到目前为止,我已经完成了所有操作,但没有序列化。

这是我编写的 Java 代码片段:

String file = "\\temp.json";

FileReader reader = new FileReader(file);

JsonStreamParser parser = new JsonStreamParser(reader);
// Parse entire JSON
JsonElement element = parser.next();
// Get root element
JsonObject sites = element.getAsJsonObject();
// Get first child element
JsonObject site1 = sites.getAsJsonObject("1");

JsonObject clust1 = site1.getAsJsonObject("CLUST");

for(int i = 1; i < 12; i++) {
// "Dynamic" variable
String num = Integer.toString(i);
// Get property whose name is a number, has siblings
JsonObject one = custCluster1.getAsJsonObject(num);

one.getAsJsonObject().addProperty("name", "cluster" + i);

JsonObject subOne = one.getAsJsonObject("SUB");

subOne.getAsJsonObject().addProperty("name", "aName" + i);

for(int n = 1; n < 1002; n++) {
// "Dynamic" variable
String inst = Integer.toString(n);
// Get property whose name is a number, has siblings
JsonObject subSub = subOne.getAsJsonObject(inst);
// If the property doesn't exist, then don't execute
if(subSub != null) {

JsonArray subSubArray = subSub.getAsJsonArray("SUBSUB");

subSub.getAsJsonObject().remove("name");

int m = 0;

while(m < subSubArray.size()) {

subSubArray.get(m).getAsJsonObject().remove("SR");

subSubArray.get(m).getAsJsonObject().remove("FI");

subSubArray.get(m).getAsJsonObject().remove("IND");

subSubArray.get(m).getAsJsonObject().addProperty("ST", "1");

subSubArray.get(m).getAsJsonObject().addProperty("ID", "2");

subSubArray.get(m).getAsJsonObject().addProperty("DESCR", "hi");

m++;
}
m = 0;
}
}
}

最佳答案

感谢@mmcrae 的帮助和建议。

由于我已经将(键,值)对保存在变量中,因此您可以从父级中删除要更改名称的属性,然后使用新名称和已保存的内容将其添加回来。

像这样:

JsonObject sites = element.getAsJsonObject();

JsonObject site1 = sites.getAsJsonObject("1");

JsonObject clust1 = site1.getAsJsonObject("CLUST");

site1.remove("CLUST");

site1.add("NEWCLUST", clust1);

关于Java:Gson更改属性名称而不序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970712/

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