【问题标题】:Replace Or Remove Dote (.) from keys string in json string for inserting in mongodb从 json 字符串中的键字符串替换或删除 Dote (.) 以插入 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+)))(":$) 但不起作用

【问题讨论】:

    标签: c# json regex mongodb bson


    【解决方案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);
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多