从 json 字符串中的键字符串替换或删除 Dote (.) 以插入 mongodb

Posted

技术标签:

【中文标题】从 json 字符串中的键字符串替换或删除 Dote (.) 以插入 mongodb【英文标题】:Replace Or Remove Dote (.) from keys string in json string for inserting in mongodb 【发布时间】:2019-06-21 05:11:27 【问题描述】:

我想用 C# Driver 将 Json 插入到 mongoDB 中,但是我得到了异常,因为你不能用包含点 (.) 的键插入 json 现在我想用 _ 或其他东西替换键中的所有点...

我试试这个:((?<=(\w))(\.)(?=(\w+)))

它选择字符串之间的所有点,但问题是无法验证键例如,如果我在 Json 值中有网站名称,还选择网站名称中的点... 现在我需要一种方法来找到以(“:)结尾的单词之间的所有点 它是一个 json 样本:

"activity:12356", "permalink": "https://www.hostname.com/fff/update    /urn:li:activity:123465", "tracking": "trackingId": "sdjahgs/sfkdjk==", "value": "com.site.aaaa.bbb.ccc": "actor": "com.aaa.sss.ddd.wwww": "urn": ....

在这里,我想将“com.aaa.sss.ddd.wwww”替换为“com_aaa_sss_ddd_wwww”,但我的正则表达式选择 www.hostname.com 中的点

我也尝试过类似((?<=(\w))(\.)(?=(\w+)))(":$) 但不起作用

【问题讨论】:

【参考方案1】:

仅使用正则表达式很难实现,但是简单的正则表达式结合额外的代码来替换点会给你想要的结果:

var s = @"""activity:12356"", ""permalink"": ""https://www.hostname.com/fff/update    /urn:li:activity:123465"", ""tracking"": ""trackingId"": ""sdjahgs/sfkdjk=="", ""value"": ""com.site.aaaa.bbb.ccc"": ""actor"": ""com.aaa.sss.ddd.wwww"": ""urn"": ....";
var matches = Regex.Matches(s, @"""[^""]+"":");
foreach (Match match in matches)

  var replace = match.Value.Replace('.', '_');
  s = s.Replace(match.Value, replace);

使用的模式:"[^"]+":,表示:

匹配",然后匹配"以外的一个或多个字符与[^"]+,最后匹配":字面意思。

【讨论】:

以上是关于从 json 字符串中的键字符串替换或删除 Dote (.) 以插入 mongodb的主要内容,如果未能解决你的问题,请参考以下文章

无法从 asp dot net 3.1 中的 appsettings.json 读取字符串数组

PHP使用字符串替换从多维数组中的键值替换关键字

在所有文件中找到JSON键,并删除相应的键值对。

替换函数 - 没有重载方法错误 C# - 试图删除字符串中的部分

我需要从嵌套在 JSON 对象中的名为 token 的字段中解析或提取字符串,以便替换会话令牌的电子邮件和密码

如何在胶合时分离(带有空格)字符串,使用数组中的键来检查它是否粘合?