是否可以在不使用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;
}
}
}
答案 0 :(得分:2)
感谢@mmcrae帮助并建议了这种方法。
由于我已经在变量中保存了(键,值)对,因此您可以从父项中删除要更改其名称的属性,然后使用新名称和内容添加回来。已经保存了。
像这样:
JsonObject sites = element.getAsJsonObject();
JsonObject site1 = sites.getAsJsonObject("1");
JsonObject clust1 = site1.getAsJsonObject("CLUST");
site1.remove("CLUST");
site1.add("NEWCLUST", clust1);