c# - 在 C# 中从更大的 json 创建简化的 json
问题描述
我有一个来自与此类似的服务器的 json(具有多个嵌套的 json 对象)。
{
"employee": [{
"fullname": {
"firstname": "abcd",
"lastname": "defg"
},
"project": [{
"projectname":"abcd_1",
"datejoined": "2019-06-18T01:29:38.6013262+00:00",
"projectmanager": "abcdM1",
}, {
"projectname":"abcd_2",
"datejoined": "2018-06-18T01:29:38.6013262+00:00",
"projectmanager": "abcdM2",
}, {
"projectname":"abcd_3",
"datejoined": "2017-06-18T01:29:38.6013262+00:00",
"projectmanager": "abcdM3",
}
]
},{
"fullname": {
"firstname": "abcd",
"lastname": "defg"
},
"project": [{
"projectname":"abcd_1",
"datejoined": "2019-06-18T01:29:38.6013262+00:00",
"projectmanager": "abcdM1",
}, {
"projectname":"abcd_2",
"datejoined": "2018-06-18T01:29:38.6013262+00:00",
"projectmanager": "abcdM2",
}, {
"projectname":"abcd_3",
"datejoined": "2017-06-18T01:29:38.6013262+00:00",
"projectmanager": "abcdM3",
}
]
}
]
}
服务组件将仅以简化的 json 格式将相关数据发送到 UX。
我想提取employee.fullname.firstname 和employee.project.projectname。
输出应该是
{
"employee": [{
"fullname": {
"firstname": "abcd",
},
"project": [{
"projectname":"abcd_1",
}, {
"projectname":"abcd_2",
}, {
"projectname":"abcd_3",
}
]
},{
"fullname": {
"firstname": "abcd",
},
"project": [{
"projectname":"abcd_1",
}, {
"projectname":"abcd_2",
}, {
"projectname":"abcd_3",
}
]
}
]
}
我将 Json 展平,但它给出的标签为employee.0.fullname.firstname 和employee.0.project.0.projectname 等
在有/没有展平的情况下提取的最佳方法是什么?
解决方案
这是一个使用仅具有您想要的属性的 poco 的示例,您可以在此对象中反序列化它,然后序列化回 json 以获得您想要的东西。
void Main()
{
var myJson = @"
{
""employee"": [{
""fullname"": {
""firstname"": ""abcd"",
""lastname"": ""defg""
},
""project"": [{
""projectname"":""abcd_1"",
""datejoined"": ""2019-06-18T01:29:38.6013262+00:00"",
""projectmanager"": ""abcdM1"",
}, {
""projectname"":""abcd_2"",
""datejoined"": ""2018-06-18T01:29:38.6013262+00:00"",
""projectmanager"": ""abcdM2"",
}, {
""projectname"":""abcd_3"",
""datejoined"": ""2017-06-18T01:29:38.6013262+00:00"",
""projectmanager"": ""abcdM3"",
}
]
},{
""fullname"": {
""firstname"": ""abcd"",
""lastname"": ""defg""
},
""project"": [{
""projectname"":""abcd_1"",
""datejoined"": ""2019-06-18T01:29:38.6013262+00:00"",
""projectmanager"": ""abcdM1"",
}, {
""projectname"":""abcd_2"",
""datejoined"": ""2018-06-18T01:29:38.6013262+00:00"",
""projectmanager"": ""abcdM2"",
}, {
""projectname"":""abcd_3"",
""datejoined"": ""2017-06-18T01:29:38.6013262+00:00"",
""projectmanager"": ""abcdM3"",
}
]
}
]
}";
var myObject = Newtonsoft.Json.JsonConvert.DeserializeObject<Employee>(myJson);
var myTrimmedJson = Newtonsoft.Json.JsonConvert.SerializeObject(myObject);
Console.WriteLine(myTrimmedJson);
}
public class Fullname
{
public String firstname { get; set; }
//public String lastname { get; set; }
}
public class Project
{
public String projectname { get; set; }
//public String datejoined { get; set; }
//public String projectmanager { get; set; }
}
public class Person
{
public Fullname fullname { get; set; }
public List<Project> project { get; set; }
}
public class Employee
{
public List<Person> employee { get; set; }
}
推荐阅读
- openid-connect - 定制 。npm oidc-provider 库中的知名配置
- laravel - 如何使用 Laravel Livewire 过滤数组?
- docker - 在 Docker 开发容器中使用 VS Code 开发 TS React 应用程序
- django - DjangoQ:“str”对象在访问“request.user”时没有属性“user”
- r-markdown - Papaja 不使用“等”。以 apa 格式多次引用参考文献时
- python - 如何使逻辑回归模型适用于其他文件在 Python 中进行预测?
- include - 告诉 `pandoc` 生成没有前导的 `.tex` 的优雅方式,以便它们可以包含在乳胶中?
- node.js - 如何将自定义参数传递给 pm2
- java - 开始 ActivityforResult 显示已贬值
- elasticsearch - Elasticsearch:找不到索引模板