将key = value字符串转换为JSON

安德烈·博尔赫斯

我有以下格式的一串键和值:

KEY1=someValue, KEY2="Hello, World!", SOME.OTHER.KEY=Hello World!, KEY4="Hello, ""World""!"

如何使用C#将其转换为JSON字符串?这可能可以使用正则表达式来完成,但是我无法提出正确的模式。我也无法弄清楚如何使用像这样的库来做到这一点Newtonsoft.Json

我要生成的JSON如下:

{
    "KEY1":"someValue",
    "KEY2":"Hello, World!",
    "SOME.OTHER.KEY":"Hello World!",
    "KEY4":"Hello, \"World\"!" 
}
德米特里·埃格罗夫(Dmitry Egorov)

好吧,有了来自更新问题的嵌套引号,事情变得更加棘手。我看不到任何可行的方法来提取具有任意级别的嵌套引号的值。(对于regex方法而言,这是正确的-仍然可以手动扫描字符串并根据嵌套级别计算后续引号的数量。)

假设我们只限制一层嵌套的带引号的字符串,则正则表达式为:

(?<key>[^=,\s]+)=(?:"(?<value>(?:[^"]|""[^"]*"")*?)"|(?<value>[^,]*))(?:,|$)

然后,您可以找到所有匹配项,并根据JSON规则重新格式化对:

var input = @"KEY1=someValue, KEY2=""Hello, World!"", 
    SOME.OTHER.KEY=Hello ""World""!, 
    KEY4=""Hello, """"World""""!"", 
    KEY5=""Hello, """"World""""!"", 
    KEY6=""""""Hello"""", """"World""""!""";
var pairs = Regex.Matches(input, @"(?<key>[^=,\s]+)=(?:""(?<value>(?:[^""]|""""[^""]*"""")*?)""|(?<value>[^,]*))(?:,|$)")
    .Cast<Match>()
    .Select(m =>
        string.Format("  {0}: {1}",
            JsonConvert.ToString(m.Groups["key"].Value),
            JsonConvert.ToString(m.Groups["value"].Value.Replace("\"\"", "\""))));
var json = "{\n" + string.Join(",\n", pairs) + "\n}";

正则表达式说明:

  • (?<key> -启动一个名为的捕获组 key
    • [^=,\s]+-匹配任何字符非空序列排除=,和空格
    • )-结束key小组
  • = -从字面上匹配等号
  • (?: -启动一个未命名的组,用于对备选方案进行分组
    • 第一种选择-报价:
    • " -文字开头的报价
    • (?<value> -启动一个名为的捕获组 value
      • (?:[^"]|""[^"]*"")* -匹配任何非引号或带引号的字符串序列(请不要将引号加倍)
      • ? -使之前的比赛不贪心
      • )-结束value小组
    • " -文字结尾的报价
    • | -替代分隔符
    • 第二种选择-未报价的值:
    • (?<value>-启动另一个value捕获组-.NET正则表达式主体维护一堆命名组,因此您可以简单地通过名称访问任何一个可选捕获组
      • [^,]* -匹配任何不包含逗号的序列
      • )-结束第二value
    • ) -结束未命名的小组
  • (?:,|$) -匹配逗号或字符串末尾(均应匹配该值)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将json字符串转换为包含@key的POJO

来自分类Dev

将json字符串转换为包含@key的POJO

来自分类Dev

将字符串转换为JSON

来自分类Dev

如何将像 {key1=value1, key2=value2} 这样的字符串转换为 json 字符串或 Jsonobject?

来自分类Dev

将字典字符串字符串转换为json字符串

来自分类Dev

将字典字符串字符串转换为json字符串

来自分类Dev

将错误的JSON字符串转换为JSON数组

来自分类Dev

将无效的JSON字符串转换为JSON

来自分类Dev

ansible将转义的json字符串转换为json

来自分类Dev

将JSON字符串转换为JSON数组

来自分类Dev

将无效的JSON字符串转换为JSON

来自分类Dev

javascript将JSON字符串转换为JSON对象

来自分类Dev

如何将JSON字符串转换为JSON

来自分类Dev

将JSON字符串转换为JSON数组

来自分类Dev

无法将 json 字符串转换为 json 对象

来自分类Dev

Spring - 将 JSON 字符串转换为 JSON 对象

来自分类Dev

将字符串转换为pygame.key

来自分类Dev

将字符串转换为lambda / value

来自分类Dev

将日期字符串转换为JSON日期格式

来自分类Dev

将JSON(作为字符串)转换为多维数组

来自分类Dev

javascript-将字符串转换为json数组

来自分类Dev

将json字符串值转换为数字

来自分类Dev

将点分隔的字符串转换为JSON对象

来自分类Dev

将哈希图转换为JSON字符串

来自分类Dev

将字符串转换为JSON会导致问题

来自分类Dev

如何将JSON数组转换为字符串..?

来自分类Dev

将c#字符串[]转换为json

来自分类Dev

将JSON字符串转换为Python字典

来自分类Dev

将JSON字符串转换为C#字典