如何通过更改其中的一个特定字段来创建新的 json 字符串?

How to create a new json string by changing one particular field in it?

我需要用另一个用户 ID 模糊显示在原始 json 字符串中的用户 ID。之后,我将构造一个新的 json 字符串,所有内容都相同,但唯一的区别是用户 ID 不同。

举个例子,如果我原来的 json 字符串是这样的 -

{
 "user_id":{"long":1234},
 "client_id":{"int":0},
 "affinity":[
              {
               "try":{"long":55793},
               "scoring":{"float":0.19}
               },
               {
                "try":{"long":1763},
                "scoring":{"float":0.0114}
               }
            ]
}

然后我的新 json 字符串将是 - 唯一的区别是我有一个新的用户 ID,除此之外一切都一样。

{
 "user_id":{"long":98765},
 "client_id":{"int":0},
 "affinity": [ 
               {
                 "try":{"long":55793},
                 "scoring":{"float":0.19}
               },
               {
                 "try":{"long":1763},
                 "scoring":{"float":0.0114}
               }
             ]
}

我唯一的问题是,我不会只有上述格式的 json 字符串,所以我无法使用 POJO 序列化我的 json 字符串,因为我的 json 字符串将有不同的格式,但 user_id 字段将始终像我所有 json 字符串中的那样,它也将是 long。其他字段可能会有所不同,具体取决于我拥有的 json 字符串。

我正在使用 Gson 来执行此操作。我有下面的方法,但不确定如何构建一个新的 json 和 newUserId 并且一切都应该相同?

private static String creatNewJson(String originalJsonResponse, long newUserId) {
    JsonElement jelement = new JsonParser().parse(originalJsonResponse);
    JsonObject jobject = jelement.getAsJsonObject();
    jobject = jobject.getAsJsonObject("user_id");

    // not sure what I should do here to construct a new json with newUserId

}

或者 Gson 不是正确的方法吗?我应该为此使用正则表达式吗?

input.replaceAll("(\"user_id\":\{\"long\":)\d+", "" + newID)怎么样?