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

问题描述 投票:0回答:1

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

我试试这个:((?<=(\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+)))(":$)但不工作

c# json regex mongodb bson
1个回答
0
投票

仅使用正则表达式来实现它是相当困难的,但是简单的正则表达式结合额外的代码来替换点将为您提供所需的结果:

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);
}

使用的模式:"[^"]+":,意思是:

匹配",然后匹配一个或多个"以外的[^"]+,并最终匹配":字面上。

© www.soinside.com 2019 - 2024. All rights reserved.