获取 JSON 路径的父项

问题描述 投票:0回答:1

我正在使用一些 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
    }]
json jsonpath
1个回答
0
投票

我希望您使用 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();
}

© www.soinside.com 2019 - 2024. All rights reserved.