在 Groovy 上使用 JSON 响应并使用响应填充 Map
Posted
技术标签:
【中文标题】在 Groovy 上使用 JSON 响应并使用响应填充 Map【英文标题】:Working with JSON Response on Groovy and populating a Map with the response 【发布时间】:2020-12-03 00:57:39 【问题描述】:我正在使用 groovy(使用 HttpResponse - Unirest)向 URL 发出 POST 请求,并将响应作为 JSONObject 检索。
接下来,我将使用该响应创建一个地图,使用:
Map<String, Object> myMap = new HashMap<>(response.toMap())
我的 JSON 响应是这样的(很抱歉看起来像一个奇怪的响应,但我不得不删除敏感信息):
"responses": [
"took": 123,
"timed_out": true,
,
"hits":
"total": 123,
"max_score": null,
"hits": [
"_source":
"message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum payloadType=JSONpayload=["some json payload here"]
]
]
对此我有两个问题:
1 - 当我尝试打印键和值时,键是“响应”,所有其他部分都是值。这是正常的吗?我也不能使用 put 函数向映射添加值。这意味着,我的地图目前有点时髦,我似乎找不到解决方案来解决这个问题。我应该使用另一个库吗?我不介意使用另一个,我只需要找到一种方法来制作一张我可以使用的地图。
2 - 我需要修剪我的地图值以仅在特定字符串之后显示结果,在这种情况下,我需要使用“payloadType = JSONpayload =”之后的JSON有效负载填充我的地图以将其存储在一个变量,然后使用该信息。我怎样才能做到这一点?正则表达式是否足以实现它?我正在考虑使用迭代器来遍历所有值,然后将它们修剪为变量。对于这种情况,这是一个好的解决方案吗?
对不起,如果有什么令人困惑的地方,但我还是 Java 和 Groovy 的新手,这是我在项目中的第一个任务。
谢谢!
【问题讨论】:
一般你想用JSON.parse(jsonResponse)
,然后就可以遍历树,访问你需要的字段***.com/questions/6688090/…
【参考方案1】:
您可以不将您的响应映射到 Map,而是映射到您自定义创建的名为 POJO 的对象。接下来,使用库 Jackon,或者 Gson 解析这个 Json。最后,您可以访问 Json 中的每个值,例如使用正则表达式,从特定字段中提取某些数据。这种方法是长期的方法,易于测试和维护。
【讨论】:
以上是关于在 Groovy 上使用 JSON 响应并使用响应填充 Map的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HTTPBuilder 在 Groovy 中设置 GET-Response
我可以在 ASMX JSON 服务上设置 HTTP 响应代码并引发异常吗?