c# - 具有空格分隔键的 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);
解决方案
您可以根据需要向列表中添加更多属性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);
推荐阅读
- python - 我如何知道是否使用 python-telegram-bot 删除了一条消息?
- angular - scripts.js 文件大小随着角度延迟加载而增加
- ios - 无法在 macOS Monterey 版本 12.0 Beta 中安装 Cocoapods - Xcode 13.0(13A233)
- python - 不正确的测试但不确定我的代码有什么问题?
- python - 如何为基于 python 的 Windows 服务创建安装程序
- assembly - 汇编,将 64 位立即移至内存?
- php - 使用 Foreach php 对数据进行编号
- php - 多选 - 将数据插入 MySQL DB 多对多关系 (phpmyadmin)
- python - 如何使用 SQLAlchemy 仅检索具有最高值的多关系表的第一行?
- javascript - Pupette - 找不到一个 ID形式