我正在使用一些 json 路径来更新字段中的名称引用,并且效果很好。现在我们想要一个类似的东西来返回引用。我正在尝试修改相同的 json 路径以返回父项。当匹配与对象不在同一级别时,我遇到问题。
示例 JSON 路径(这用于更新值)
$.LogicNodeList[*].compChildren[?(@.diagramName == 'S-DGN-B')].diagramName
我想要逻辑节点列表(这会给出一个不喜欢“?”的错误)
$.LogicNodeList[?(@.compChildren[?(@.diagramName == 'S-DGN-B')])]
JSON 示例
{
"LogicNodeList": [
{
"id": "b61aa8a5-8edd-4207-ab58-ccba83afe67e",
"name": "CCS_TOP",
"desc": "",
"gateType": "gtOr",
"rootName": "CCS_TOP",
"compChildren": [],
"gateChildren": [
"CCS-Trains",
"CCS-Supply"
],
"isRoot": true
},
{
"id": "27865e6f-b457-42ff-9303-11c700657212",
"name": "CCS-Supply",
"desc": "",
"gateType": "gtOr",
"rootName": "CCS_TOP",
"compChildren": [
{
"diagramName": "S-DGN-B",
"stateValues": []
},
{
"diagramName": "C-MOV-1",
"stateValues": []
},
{
"diagramName": "S-TNK-T1",
"stateValues": []
}
],
"gateChildren": [],
"isRoot": false
},
{
"id": "6d366c22-5e48-45b5-ac5d-9325a122e451",
"name": "CCS-Train-A",
"desc": "",
"gateType": "gtOr",
"rootName": "CCS_TOP",
"compChildren": [
{
"diagramName": "C-PMP-A",
"stateValues": []
},
{
"diagramName": "S-DGN-A",
"stateValues": []
},
{
"diagramName": "C-CKV-A",
"stateValues": []
},
{
"diagramName": "C-MOV-A",
"stateValues": []
}
],
"gateChildren": [],
"isRoot": false
}]
}
我想要返回json路径
[{
"id": "27865e6f-b457-42ff-9303-11c700657212",
"name": "CCS-Supply",
"desc": "",
"gateType": "gtOr",
"rootName": "CCS_TOP",
"compChildren": [
{
"diagramName": "S-DGN-B",
"stateValues": []
},
{
"diagramName": "C-MOV-1",
"stateValues": []
},
{
"diagramName": "S-TNK-T1",
"stateValues": []
}
],
"gateChildren": [],
"isRoot": false
}]
我希望您使用 C#,(恕我直言)否则请告诉我,我将删除此答案 那么,为什么不通过 isroot=false 选择呢?你会得到所有的孩子
void Main()
{
string json = "{\"LogicNodeList\":[{\"id\":\"b61aa8a5-8edd-4207-ab58-ccba83afe67e\",\"name\":\"CCS_TOP\",\"desc\":\"\",\"gateType\":\"gtOr\",\"rootName\":\"CCS_TOP\",\"compChildren\":[],\"gateChildren\":[\"CCS-Trains\",\"CCS-Supply\"],\"isRoot\":true},{\"id\":\"27865e6f-b457-42ff-9303-11c700657212\",\"name\":\"CCS-Supply\",\"desc\":\"\",\"gateType\":\"gtOr\",\"rootName\":\"CCS_TOP\",\"compChildren\":[{\"diagramName\":\"S-DGN-B\",\"stateValues\":[]},{\"diagramName\":\"C-MOV-1\",\"stateValues\":[]},{\"diagramName\":\"S-TNK-T1\",\"stateValues\":[]}],\"gateChildren\":[],\"isRoot\":false},{\"id\":\"6d366c22-5e48-45b5-ac5d-9325a122e451\",\"name\":\"CCS-Train-A\",\"desc\":\"\",\"gateType\":\"gtOr\",\"rootName\":\"CCS_TOP\",\"compChildren\":[{\"diagramName\":\"C-PMP-A\",\"stateValues\":[]},{\"diagramName\":\"S-DGN-A\",\"stateValues\":[]},{\"diagramName\":\"C-CKV-A\",\"stateValues\":[]},{\"diagramName\":\"C-MOV-A\",\"stateValues\":[]}],\"gateChildren\":[],\"isRoot\":false}]}";
JObject o = JObject.Parse(json);
var selection = o.SelectTokens("$.LogicNodeList[?(@.isRoot == false)]").Dump();
}