正则表达式替换json字符串

时间:2017-10-25 12:32:50

标签: java json regex

是否有正则表达式我可以用来查找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\""); 

2 个答案:

答案 0 :(得分:3)

你做错了很多事。

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

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

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

答案 1 :(得分:1)

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

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