从 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 读取字符串数组
替换函数 - 没有重载方法错误 C# - 试图删除字符串中的部分