C#获取所有出现在长字符串中的单词的所有内容

时间:2018-12-21 15:46:37

标签: c# json string

我有这个字符串,实际上是JSON格式。

{
  "key1": val1
  "key2": val2
  .
  .
  .
  "keyN": {
    "keyN1": valN1
    "keyN2": valN2
    "keyN3": {
      "keyN3-1": valN3-1
      "keyN3-2": valN3-2
    }
  }
  .
  .
  .
  "keyNN": {
    "keyNN1": valNN1
    "keyNN2": valNN2
    "keyNN3": [
        {
          "keyNN3-1": valNN3-1,
          "keyNN3-2": valNN3-2,
          "keyNN3-3": {
            "keyNN3-3-1": valueNN3-3-1,
            "keyNN3-3-2": valueNN3-3-2,
            "keyM": {
              "KeyM1": ValueM1,
              "KeyM2": ValueM2,
              .
              .
              "KeyMN": ValueMN
            }
          }
        },
        .
        .
        .
        {
          "keyNN3-1": valNN3-1,
          "keyNN3-2": valNN3-2,
          "keyNN3-3": {
            "keyNN3-3-1": valueNN3-3-1,
            "keyNN3-3-2": valueNN3-3-2,
            "keyM": {
              "KeyM1": ValueM1,
              "KeyM2": ValueM2,
              .
              .
              "KeyMN": ValueMN
            }
          }
        }
    ]
    }
}

我想一直获得密钥“ keyM”的所有内容,我的意思是,我想返回这个

[
  {
    "KeyM1": ValueM1,
    "KeyM2": ValueM2,
    .
    .
    "KeyMN": ValueMN
  },
  .
  .
  {
    "KeyM1": ValueM1,
    "KeyM2": ValueM2,
    .
    .
    "KeyMN": ValueMN
  }
]

我收到不同格式的字符串,第一个结构不是唯一的结构,但始终具有“ keyM”。在这一刻,我正在做一会儿,但是效率不高,我想知道是否存在更好的方法。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的JSON结构,则应该可以使用JSON.NET这样的方法:

var jObject = JsonConvert.Deserialize<JObject>(jsonText);
var keyMItems = jObject.SelectTokens("keyM");

然后,您对这些项目的处理将取决于您的用例。要输出列出的内容,可以将其打包到新的JArray中。

Console.WriteLine(new JArray(keyMItems).ToString());

答案 1 :(得分:0)

JObject o = JObject.Parse(initialJson);

IEnumerable<JToken> keyMs = o.SelectTokens("$..keyM");

测试JsonPaths http://jsonpath.com/

的好工具