在Groovy上使用JSON响应,并使用响应填充地图

问题描述

我正在用groovy向URL发出POST请求(使用HttpResponse-Unirest),并将响应作为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的新手,这是我在该项目的第一份工作。

谢谢!

解决方法

您可以将响应映射到您的自定义创建的对象POJO,而不是映射到Map。接下来,使用库克·杰克逊(Jackon)或Gson解析此Json。最后,您可以访问Json中的每个值,并使用regexp例如从特定字段中提取某些数据。这种方法是长期方法,易于测试和维护。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...