c# - 从 C# 中的 JSON 响应中删除所有出现的特定键
问题描述
我有一个 JSON 字符串,我想从中消除给定键的所有出现。
JSON 我有:
string requstBody =
{
"payLoad": [
{
"BaseVersionId_": 9,
"VersionId_": 10,
"AssetCollateralLink": [
{
"AssetId": 137,
"BaseVersionId_": 9,
"VersionId_": 10
},
{
"AssetId": 136,
"BaseVersionId_": 0,
"VersionId_": 1
}
],
"CollateralProvider": [],
"AdvCollateralAllocation": [
{
"LinkId": 91,
"IsDeleted_": false,
"BaseVersionId_": 1,
"VersionId_": 2
}
]
}
]
}
我想消除键“BaseVersionID_”和“VersionId_”如下:
string requstBody =
{
"payLoad": [
{
"AssetCollateralLink": [
{
"AssetId": 137
},
{
"AssetId": 136
}
],
"CollateralProvider": [],
"AdvCollateralAllocation": [
{
"LinkId": 91,
"IsDeleted_": false
}
]
}
]
}
我使用了 JObject.Remove(); 如下
JObject sampleObj1 = new JObject();
sampleObj1 = JsonHelper.JsonParse(requestBody);
sampleObj1.Remove("BaseVersionId_");
但只能删除 payLoad Hierarchy 下的键。如何删除所有出现的 Key。
解决方案
我会这样使用 JsonPath:
var toRemove = jsonObject
.SelectTokens("$.payLoad.[*].AssetCollateralLink.[*]..BaseVersionId_")
.Concat(stuff.SelectTokens("$.payLoad.[*].AssetCollateralLink.[*]..VersionId_"))
.Concat(stuff.SelectTokens("$.payLoad.[*].AdvCollateralAllocation.[*]..VersionId_"))
.Concat(stuff.SelectTokens("$.payLoad.[*].AdvCollateralAllocation.[*]..BaseVersionId_"))
.ToList();
for (int i = toRemove.Count - 1; i >= 0; i--)
{
toRemove[i].Parent?.Remove();
}
推荐阅读
- java - 如何使用 Apache Camel 阅读 gmail
- svelte - 在 svelte 中导入 stdlib.js
- python - 如何获取在 html 页面中发出的所有自动 GET 请求?
- python - CPython 构建失败 _ctypes 和 ssl
- html - CSS 网格布局被隐藏的孩子打破了
- python - 熊猫:按时间选择行
- bash - 如何在bash中删除多个匹配项
- gcc - Cmake 无法将自定义命令识别为有效源
- port - Access Grafana from another machine on the same network
- python - 如何过滤已阅读超过 4 本书的用户?