【问题标题】:Extract properties from a string given a key从给定键的字符串中提取属性
【发布时间】:2023-03-16 19:43:01
【问题描述】:

我有一个字符串的小问题

da:,de:,en:Henkell Brut Vintage,fr:,nl:,sv:

我需要将此字符串映射到字典,这样键就是: 之前的内容 并且值在: 之后。

我尝试将其解析为Jtoken,所以看看它是否会被正确序列化,但似乎并非如此。

var name = Newtonsoft.Json.Linq.JToken.Parse(da:,de:,en:Henkell Brut Vintage,fr:,nl:,sv:);

然后使用

提取所需的属性
name.Value<String>("en").ToString());

但我似乎无法将字符串解析为Json.Linq.JToken

我的另一个想法是将它映射到字典,但这对于这个小字符串来说似乎有点过头了。

任何简单的解决方案,例如我可以提取指定键的值?

【问题讨论】:

    标签: c# string dictionary json.net mapping


    【解决方案1】:

    怎么样

    var dict = input.Split(',').Select(s => s.Split(':')).ToDictionary(a => a[0], a => a[1]);
    

    目前不是有效的 JSON。如果您可以将其存储为有效的 JSON,则可以让 JSON 解析器为您解析它,这样可以更好地处理值中的逗号和冒号(冒号后面的部分)。

    如果你只是想存储本地化形式的文本,我建议使用.resx资源文件。

    【讨论】:

    • 那会是Dictionary&lt;string, string&gt; dic = itemname.Split(',').Select(s =&gt; s.Split(':')).ToDitctionary(x =&gt; x[0], x =&gt; x[1]) 还是字典的类型?
    • 是的,应该是Dictionary&lt;string, string&gt;
    【解决方案2】:

    与 Georges 相同,但不使用 Linq

            string initial = "da:,de:,en: Henkell Brut Vintage,fr:,nl:,sv:";
            string[] comaSplit = initial.Split(',');
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            foreach (string split in comaSplit) {
                string[] colonSplit = split.Split(':');
                dictionary.Add(colonSplit[0], colonSplit[1]);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多