首页 > 解决方案 > 在 C# 中使用 JObject 解析键值的 Json 键/值

问题描述

我正在尝试获取键值的子键\值。我要完成的是删除为空或具有“-”或具有“N/A”的元素。我似乎无法弄清楚要遍历要搜索的值。

{
  "name": {
    "first": "Robert",
    "middle": "",
    "last": "Smith"
  },
  "age": 25,
  "DOB": "-",
  "hobbies": [
    "running",
    "coding",
    "-"
  ],
  "education": {
    "highschool": "N/A",
    "college": "Yale"
  }
}

代码:

JObject jObject = JObject.Parse(response);

foreach (var obj in jObject)
{
    Console.WriteLine(obj.Key);
    Console.WriteLine(obj.Value);
}

我正在尝试搜索"first":"Robert","middle":"","last":"Smith"

标签: c#jsonjson.net

解决方案


您可以使用Descendants方法获取类型的子标记JProperty,然后过滤它们的值并打印它们或一一删除

var properties = json.Descendants()
    .OfType<JProperty>()
    .Where(p =>
    {
        if (p.Value.Type != JTokenType.String)
            return false;

        var value = p.Value.Value<string>();
        return string.IsNullOrEmpty(value);
    })
    .ToList();

    foreach (var property in properties) 
        property.Remove();

    Console.WriteLine(json);

为您提供以下结果("middle": ""已删除属性)

{
  "name": {
    "first": "Robert",
    "last": "Smith"
  },
  "age": 25,
  "DOB": "-",
  "hobbies": [
    "running",
    "coding",
    "-"
  ],
  "education": {
    "highschool": "N/A",
    "college": "Yale"
  }
}

您还可以在return语句中添加更多条件,例如return string.IsNullOrEmpty(value) || value.Equals("-");删除"DOB": "-"属性


推荐阅读