重复字符串替换

时间:2014-07-16 18:11:32

标签: java regex string

我有一个从JSON对象创建的字符串,如下所示

{
 "id" : "112233",
 "someElement" : [ {
     "map" : {
        "123" : [ {..}]
      }, 
     "map" : {
        "124" :[ {..}]
      } 
  }]
} 

我需要将上面的字符串转换为以下格式。

{
  "id" : "112233",
 "someElement" : [ {
     "123" : {
        "element" : [ {..}]
      }, 
     "124" : {
        "element" :[ {..}]
      } 
  }]
} 

我尝试将字符串替换作为子字符串" map"在字符串中找到,替换为它下面的ID。

String a = jsonString.substring(jsonString.indexOf("map")+16, jsonString.indexOf("map")+19);
String b = jsonString.replace("map", a);

此模式适用于第一次出现" map"串。但是相同的ID值取代了第二个" map"串。如何替换后续出现的" map"字符串及其各自的ID。

此外,还有更好的方法吗?感谢任何反馈。谢谢!

1 个答案:

答案 0 :(得分:2)

JSON不是常规语言,因此尝试使用正则表达式进行此类更改将是脆弱的;输入中语法上无关紧要的变化很容易混淆基于正则表达式的解决方案。

由于此示例违反了保持对象成员名称唯一的JSON建议,因此许多JSON解析器将难以解析它,引发异常或忽略某些成员。但是,可能存在处理它的解析器。如果没有,那么为JSON编写自己的解析器非常容易,它可以稳健地处理这个输入。然后你的代码在空格改变时不会中断。