【问题标题】:C# Get Keys from Intertwined String DictionaryC# 从交织的字符串字典中获取键
【发布时间】:2020-02-21 08:13:03
【问题描述】:

我有一个字符串字典,如下所示。如您所见,键是字符串日期,但它们的值是字典。

"{"19-02-2020":{"1":"ABC","2":"DEF"},"20-02-2020":{"1" : "GHI","2" : "JKL","3" : "MNO"},"21-02-2020" : {"1" : "PRS"}}"

这样写得更容易理解;

"{
  "19-02-2020" : {"1" : "ABC", "2" : "DEF"},
  "20-02-2020" : {"1" : "GHI", "2" : "JKL", "3" : "MNO"},
  "21-02-2020" : {"1" : "PRS"}
 }"

如何获取字符串格式的字符串日期?我试图用“,”或其他东西来分割这个字符串。但这似乎是不可能的,因为将来我会得到更多带有其字典值的日期。有没有办法从字符串字典中获取键?

我想得到一个包含字符串日期的数组,例如["19-02-2020","20-02-2020","21-02-2020"]

【问题讨论】:

  • 如果您可以提供带有预期输出的minimal reproducible example,会更容易为您提供帮助。此外,这看起来像 JSON - 您不只是将其解析为 as JSON 的任何原因,例如使用 Json.NET 创建 JObject?
  • @JonSkeet 感谢您的警告。我添加了我的预期输出。是的,它看起来像 json,但我必须使用字符串格式。
  • 那仍然不是minimal reproducible example提供一个我们可以复制、粘贴、编译的代码。目前还不清楚你真正得到了什么。
  • 字典有一个Keys属性,你可以使用它
  • @Wicaledon,你真的有一个string dictionary,或者实际上有一个带有json内容的a string吗?真正的问题是“如何解析 JSON”?

标签: c# json string dictionary


【解决方案1】:

您可以将您的 JSON 字符串从 Newtonsoft.Json.Linq 命名空间解析为 JObject。它实现了IDictionary<string, JToken>,所以你很容易得到string的密钥

var jObject = JObject.Parse(json);

foreach (var item in jObject) 
    Console.WriteLine(item.Key);

输出如下

【讨论】:

    【解决方案2】:

    由于您的数据只是带有 字符串键字典值字典,因此您可以轻松反序列化它(例如,使用 Newtonsoft.Json ) 并提取您需要的值。

    using Newtonsoft.Json;
    
    var deserializedDictionary = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(yourString);
    
    // The data you are interested in.
    var dates = dict.Keys.ToArray();
    

    【讨论】:

    • 感谢您的回答,但例如我怎样才能获得第一次约会?我以为 dates 的类型是数组,所以我尝试了 dates[0] 但没有用
    • 我进行了编辑。只需添加.ToArray() 即可使键集合成为一个数组。
    猜你喜欢
    • 2013-07-02
    • 2016-12-16
    • 2016-06-24
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多