简体   繁体   中英

json parsing with groovy collect values

I have following json text and my goal is to find if any of the "direct" field has value 'false' for meta.name="name1"

I can parse and get list for "name1" but not sure how to go further.. like collect values of field "direct" != true and check if collection is more than 0.

def list = new groovy.json.JsonSlurper().parseText(text )
println list.record.land.find{ it.meta.name == 'name1' } 



{
  "version": 1,
  "record": {
    "land": [
      {
        "meta": {
          "name": "name1",
          "type": "person"
        },
        "delete": {
          "result": "allow",
          "factor": {
            "direct": true,
            "rules": [
              {
                "rule1": "1002",
                "uri": "/deeds/567576-ffgt-1002"
              },
              {
                "rule1": "5012",
                "uri": "/deeds/567576-dfge-5012"
              }
            ]
          }
        },
        "transfer": {
          "result": "allow",
          "factor": {
            "direct": true,
            "rules": [
              {
                "rule1": "1002",
                "uri": "/deeds/567576-ffgt-1002"
              },
              {
                "rule1": "5012",
                "uri": "/deeds/567576-dfge-5012"
              }
            ]
          }
        },
         "move": {
          "result": "allow",
          "factor": {
            "direct": false,
            "rules": [
              {
                "rule1": "1002",
                "uri": "/deeds/567576-ffgt-1002"
              },
              {
                "rule1": "5012",
                "uri": "/deeds/567576-dfge-5012"
              }
            ]
          }
        }

  }
  ]
}
}

In first step you can filter json to find all objects with specifi name:

def filtered = list.record.land.findAll{ it.meta.name == 'name1'}

Then you could something like this:

def directIsFalse = ['delete', 'transfer', 'move'].any{
     filtered[it].factor.direct[0] == false;
}

This would return true if in at least one section ("delete", "transfer" or "move") field direct will be equal to false .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM