【问题标题】:Groovy - Parse JSON where only certain values exists in responseGroovy - 解析响应中仅存在某些值的 JSON
【发布时间】:2018-08-31 02:23:40
【问题描述】:

我正在尝试使用 JsonSlurper 解析具有重复对象的 JSON 响应,以与 JDBC 查询进行比较。但是,我只想比较该对象中存在特定值的对象。

如果我有这样的响应,我将如何只解析国家等于美国或加拿大的对象,从而忽略其他任何内容?

{
    "info": [{
        "name": "John Smith",
        "phone": "2125557878",
        "country": {
            "value": "USA"
        }
    },
    {
        "name": "Jane Smith",
        "phone": "2125551212",
        "country": {
            "value": "USA"
        }
    },
    {
        "name": "Bob Jones",
        "phone": "4165558714",
        "country": {
            "value": "Canada"
        }
    },
    {
        "name": "George Tucker",
        "phone": "4454547171",
        "country": {
            "value": "UK"
        }
    },
    {
        "name": "Jean Normand",
        "phone": "4454547171",
        "country": {
            "value": "France"
        }
    }]
}

这就是我在 groovy 中所拥有的:

def jsonResponse = context.expand('${RESTRequest#Response}')
def parsedJson = new JsonSlurper().parseText(jsonResponse)
def info = parsedJson.info

    def jsonDataObjects = []
    info.each { json ->
        jsonDataObjects.add(Model.buildJSONData(json))
    }

我正在构建一个需要与数据库进行比较的元素集合。我如何只添加到 info.country.value = USA 或 Canada 的那个集合中?

我尝试像这样使用 .findAll 来测试我是否可以让它只被其中一个国家过滤:

def info = parsedJson.info.country.findAll{it.value == "USA"}

但是,当我这样做时,只保留值字段。我从解析中丢失了姓名和电话。

提前感谢您的帮助。

【问题讨论】:

  • 您显示的 JSON 不正确 - 它多次重复 info 字段,因此当您使用 JsonSlurper 解析它时,它看起来像这样 {"info":{"name":"Jean Normand","phone":"4454547171","country":{"value":"France"}}}
  • 这是我模拟数据而不是复制我正在使用的数据的错误。信息应位于顶部,其余位于数组中。我会更新它,但问题已得到解答。

标签: json groovy


【解决方案1】:

你试过了吗

def info = parsedJson.info.findAll{it.country.value == "USA"}

?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2022-11-16
    • 2021-07-02
    相关资源
    最近更新 更多