【问题标题】:Regex to replace in json string正则表达式替换 json 字符串
【发布时间】:2018-04-06 13:14:09
【问题描述】:

是否有一个正则表达式可以用来查找 JSON 字符串中的所有数字并将它们替换为双引号?

例如在下面的 JSON 字符串中,我想用双引号替换 Id 和 Phone 值。

String jsonString = " [ 
{ 
   "FirstName": "abc",  
   "Email" : "a@a.com",
   "Id" : 1,
   "Phone" : 1234567890,
   "Date": "2 May 2016 23:59:59"

}, 
{  
   "FirstName": "xyz",  
   "Email" : "b@b.com",
   "Id" : 2,
   "Phone" : 9876543210,
   "Date": "3 May 2016 23:59:59" 

} 
] ";

我想得到以下输出:

[ 
    { 
       "FirstName":"abc",  
       "Email" : "a@a.com",
       "Id" : "1",
       "Phone" : "1234567890",
       "Date": "2 May 2016 23:59:59"

    }, 
    {  
       "FirstName":"xyz",  
       "Email" : "b@b.com",
       "Id" : "2",
       "Phone" : "9876543210",
       "Date": "3 May 2016 23:59:59"  

    } 
    ] 

我尝试了下面的行,但它不起作用。有什么想法吗?

 jsonString = jsonString.replaceAll("=[ ]*([\\d]+)", "= \"$1\""); 

【问题讨论】:

    标签: java json regex


    【解决方案1】:

    将正则表达式中的= 替换为:
    此外,您应该使用空格选择器而不是 [ ]

    jsonString = jsonString.replaceAll(":\\s*(\\d+)", ": \"$1\"");

    【讨论】:

    • 我还有一个日期对象。所以 : 不应该被替换。我再次编辑了我的帖子。
    • 那么你只需要在你的数字后面加上一个逗号或右花括号:":\\s*(\\d+)\s*[,}]"
    【解决方案2】:

    你做错了很多事情。

    • 您的正则表达式搜索以 = 而不是 : 开头的匹配项
    • 要捕获空白(空格),请使用\s

    这是您正确的正则表达式:https://regex101.com/r/sRDXMP/2/

    这是您的固定代码:jsonString = jsonString.replaceAll(":\\s([\\d]+)", ": \"$1\"");

    【讨论】:

    • 转义反斜杠本身不是错误,这是 Java 语法(很遗憾)
    • @MichaelA.Schaffrath 谢谢,更新了代码 sn-p。
    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多