我有 oldId
和 newId
,我想用 newId
替换 oldId
。
public static void main(String[] args) {
String jsonString = "{\"user_id\":{\"long\":876},\"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// some other json strings -
// String jsonString = "{\"user_id\":{\"string\": \"876\"},\"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// String jsonString = "{\"user_id\": \"876\", \"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// String jsonString = "{\"user_id\": 876, \"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// String jsonString = "{\"user_id\": null, \"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
String newResponse = changeJsonString(jsonString, "876", "54321");
System.out.println(newResponse);
}
private static String changeJsonString(String originalResponse, String oldId, String newId) {
return originalResponse.replaceAll(String.valueOf(oldId), String.valueOf(newId));
}
使用上面的代码,它会将 newResponse
打印为 -
{\"user_id\":{\"long\":54321},\"client_id\":{\"int\":0},\"affinity\":[{\"matter\":{\"long\":5575432193},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}
如果你仔细观察,有两个字段发生了变化,一个是 user_id
,第二个是 matter
,因为 replaceAll
会将所有内容替换为新字段。
- user_id 876 更改为 54321
- 问题 55787693 已更改为 5575432193
我正在寻找的是 - 它应该只将完整的数字替换为新的数字,而不是将中间的任何数字修改为新的数字。例如 - user_id
876
是一个完整的数字,因此它应该仅将 876
替换为 54321
而不是事情
其中876在中间。
一般来说,我想将一个号码完全替换为一个新号码。我不想在中间替换一些东西。有什么办法可以做到这一点吗?
最佳答案
正确的方法是将 JSON 数据作为 JSON 数据进行处理。
您使用的任何字符串替换或正则表达式都是脆弱的,并且可能会破坏某些输入 JSON 字符串的代码。例如,如果 user_id
和 matter
值相同怎么办?那么你不中间替换的假设就失败了。
处理 JSON 只需三行代码:
private static String changeJsonString(String originalResponse, String newId) {
try {
JSONObject root = new JSONObject(originalResponse);
((JSONObject) root.get("user_id")).put("long", Long.parseLong(newId));
return root.toString();
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
我假设您不需要 oldId
。如果您的输入字符串可能包含多个 user_id
,您只需扩展我的示例即可检查并替换适当的 JSONObject
。
请注意,我正在使用 org.json.jar for Java来自www.json.org 。您可以随意使用任何您喜欢的 JSON 解析器。
<小时/> 因为,您重新发布了这个问题,但在那里提供了完整的 JSON 字符串格式,所以我提出了这个解决方案 again但更新后可以处理user_id
的所有可能的 JSON 数据类型。
关于java - 如何完全替换一个数字而不中间修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914305/