【问题标题】:How To Replace SubString Of JSon String With Required Substring如何将 JSON 字符串的子字符串替换为所需的子字符串
【发布时间】:2015-03-06 11:43:56
【问题描述】:

以下字符串包含 JSon 解析的字符串。

      string myJSonString="{ \"_id\" : { \"$oid\" : \"54f6b062036de221c00f5540\" }, \"account\" : \"Acc1\", \"accuser\" : \"\", \"curstatus\" : \"booked\" }";

      string oldString=" { \"$oid\" :";
      string newString="";

我正在使用下面的代码使用正则表达式替换子字符串,但它不起作用;

    string   result = Regex.Replace(myJSonString, oldString, newString, RegexOptions.IgnoreCase);

第二次替换

    string oldStrin="}, \"account\"";
   string newString=", \"account\"";
  string   finalResult = Regex.Replace(result , oldString2, newString2, RegexOptions.IgnoreCase);

此代码对我不起作用;

【问题讨论】:

  • 你能举个例子吗
  • @JamesThorpe: { 确实可以是一个特殊字符,只有当它是一个量词的开头 (后跟 m,n} 或 n})。大多数时候你不需要逃避它。
  • @CasimiretHippolyte 谢谢 - 不知道!

标签: c# regex json string substring


【解决方案1】:

如果真的像你的例子一样简单,我会使用常规的字符串替换,我觉得这更容易理解:

string myJSonString="{ \"_id\" : { \"$oid\" : \"54f6b062036de221c00f5540\" }, \"account\" : \"Acc1\", \"accuser\" : \"\", \"curstatus\" : \"booked\" }";

string result = myJSonString.Replace(" { \"$oid\" :", "").Replace("}, \"account\"", ", \"account\"");

//{ "_id" : "54f6b062036de221c00f5540" , "account" : "Acc1", "accuser" : "", "curstatus" : "booked" }

【讨论】:

  • 是的,在我写完答案后我也想到了这种方法 - 请注意,您的第二次替换目前不正确,它应该替换为 , "account" - 即只是删除 }
  • @EagleBeak 谢谢它对我有用,我不知道它这么简单。
【解决方案2】:

您的版本可能无法正常工作,因为$ 是正则表达式中的一个特殊字符 - 它是一个anchor,表示一行的结尾或字符串的结尾,所以它需要用\ 转义。

话虽如此,与其将 ID 前后的部分替换为空,不如构造一个正则表达式来查找整个部分并仅用内部 ID 替换它:

string pattern = "{ \"\\$oid\" : (\"[a-z0-9]+\") }";

string myJSonString = "{ \"_id\" : { \"$oid\" : \"54f6b062036de221c00f5540\" }, \"account\" : \"Acc1\", \"accuser\" : \"\", \"curstatus\" : \"booked\" }";

string finalResult = Regex.Replace(myJSonString, pattern, "$1");

【讨论】:

  • 谢谢亲爱的,但还有一个问题是您的模式从 \"54f6b062036de221c00f5540\" 中删除了大括号并给出了 "54f6b062036de221c00f5540" 这给我带来了问题
  • @SyedMuhammadMubashir 当你说大括号时,我认为你的意思是引号?我已经更新了答案,以便引号是捕获组的一部分,现在将在替换中。
  • 对不起,我的意思是正斜杠而不是大括号
  • 请注意,您的原始字符串不包含斜杠。他们正在转义以下引号。我怀疑您检查替换值的方式意味着您不再看到它们(也不应该)。以同样的方式检查原始字符串,你会发现它也没有。
  • 它们表示将BSon Document转换为有效的JSon String,并在转换时将斜杠添加到字符串中。
猜你喜欢
  • 2017-04-24
  • 1970-01-01
  • 2012-04-03
  • 2013-07-23
  • 2020-04-05
  • 2017-03-23
相关资源
最近更新 更多