[英]Java: Gson change property name without serialization
是否可以在不使用Gson进行序列化的情况下更改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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.