【问题标题】:How to modify value of a property in a json text in C#?如何在 C# 中修改 json 文本中的属性值?
【发布时间】:2021-12-31 09:21:51
【问题描述】:

我有一个服务,它接收一些 JSON 格式的随机结构数据,并将这些数据保存在基于文档的数据库中。我无法控制发送服务,并且有一些敏感数据不应保存在我的数据库中。我只想过滤这些字段并用一些掩码字符替换它们的值。 dotnet5中有没有内置的解决方案,不添加json.net或Json Newtonsoft等第三方库?

我无法将传入的 JSON 反序列化为静态类型类,因为我不知道从其他服务发送了多少不同的类型。使用反射和动态类型也有其自身的性能损失。

【问题讨论】:

  • System.Text.Json 对您来说还不够“内置”吗?
  • 我找不到任何参考资料表明有任何工具或类可以修改 JSON 值,例如 json.net 和 newtonsoft 中的 JObject。
  • 您打算如何识别敏感数据?
  • 搜索一些敏感名称,例如密码、令牌等
  • 那么,您对传入数据了解多少?例如“它有一个属性"password":"abc123" - 正则表达式替换?

标签: c# json .net-5


【解决方案1】:

如果你没有办法改变代码,你可以在插入json的时候用sql处理。 喜欢:

CREATE PROCEDURE dbo.InsertJson(@doc  NVARCHAR(MAX))
AS BEGIN
  INSERT INTO Person (id, name, surname, age)
  SELECT id, firstNAme, lastName, age
  FROM OPENJSON(@json)
       WITH (id int, firstName nvarchar(50), lastName nvarchar(50),age int)
END

【讨论】:

  • 我认为这是一个 nosql 数据库,顺便说一句
【解决方案2】:

我终于使用正则表达式来查找并使用此代码进行屏蔽。

 private string GetMaskedJson(string json, string[] fieldNames)
        {
            if (string.IsNullOrEmpty(json)) return string.Empty;
            foreach (var field in fieldNames)
            {
                var pattern = "\""+field+"\"\\s*:\\s*(\"?)(.+?)((\")|\\,|\\})";
                var maskedValue = "===MASKED VALUE===";
                var r = new Regex(pattern);
                var k = r.GetGroupNames(); 
                var t = Regex.Matches(json, pattern);
                //R
                foreach (var ma in t.Reverse().ToList())
                {
                    var masked = maskedValue; 
                    if (string.IsNullOrWhiteSpace(ma.Groups[1].Value)) masked = $"\"{maskedValue}\""; 
                    json = json.Remove(ma.Groups[2].Index, ma.Groups[2].Length)
                        .Insert(ma.Groups[2].Index, masked);
                }
            }

            return json;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多