繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM