首页 > 解决方案 > 具有空格分隔键的 C# Unflatten JSON 对象

问题描述

要求:我的 json 文件可以有嵌套字段。我需要删除某些字段并重建 json。要删除嵌套字段,我想将 JSON 展平为 iDictionary<string, Object>,删除相应的字段并取消展平它。不幸的是,重建的 JSON 似乎不是预期的格式。请参阅下面的输入和输出 json。

输入文件.json:

{
    "First Name" : "Steve",
    "Last Name" : "Williams",
    "Age" : 20,
    "Employement Details" : {
        "Organization" : "Google",
        "SalaryReceived" : 25000,
        "Designation" : "Senior Engineer"
    }
}

展平和解展后,输出的json文件为:OutputFile.json

{
  "'First": {
    "Name'": "Steve"
  },
  "'Last": {
    "Name'": "Williams"
  },
  "Age": 20,
  "'Employement": {
    "Details'": {
      "Organization": "Google",
      "SalaryReceived": 25000,
      "Designation": "Senior Engineer"
    }
  }
}

我正在使用 Nuget 包中的库“JsonFlatten”。它正在向 JObject 添加 Flatten 和 UnFlatten 扩展方法。

展开后如何恢复原始 JSON 文件结构。请注意,当字段名称不包含空格时,我对展平/取消展平没有任何问题

string InputJson = File.ReadAllText(@"C:\Learnings\InputFile.json");
JObject jsonObject = JObject.Parse(InputJson);
var flattenedObj = jsonObject.Flatten();
var unFlattenObj = flattenedObj.Unflatten();

var JsonOutput = JsonConvert.SerializeObject(unFlattenObj);
Console.WriteLine(JsonOutput);
File.WriteAllText(@"C:\Learnings\OutputFile.json", JsonOutput);

标签: c#json

解决方案


您可以根据需要向列表中添加更多属性itemsToRemove

        string InputJson = File.ReadAllText(@"C:\Learnings\InputFile.json");
        var itemsToRemove = new List<string>() { "Organization" };
        var jObj = JObject.Parse(InputJson);

        jObj.Descendants().OfType<JProperty>()
            .Where(p => itemsToRemove.Contains(p.Name))
            .ToList()
            .ForEach(p => p.Remove());

        var newjson = jObj.ToString();
        Console.WriteLine(newjson);

推荐阅读