Nexus 脚本 return 无效 JSON

Nexus scripts doesn't return valid JSON

上下文:

我正在使用 nexus scripting API 到 return 一些数据。出于某种原因,returned 数据不符合 JSON 标准。我在 nexus PRO 3.20.1-01 上。我不确定这是 Nexus 问题还是我的脚本问题。

这是一个可测试的 Groovy 示例,可部署在 nexus 上(脚本名为 testScript.groovy

import groovy.json.JsonOutput;

Map listOfValues = new HashMap<>();
HashSet<String> values = new HashSet<String>();
values.add('test1');
values.add('test2');
values.add('test3');

listOfValues.put('someValues',values);

Map<String, String> keyValues = new HashMap<>();
keyValues.put('firstKey','firstKey');
keyValues.put('secondKey','secondValue');

listOfValues.put('keyValues',keyValues);

result = JsonOutput.toJson(listOfValues);
return result;

(我知道我不需要 Groovy 中的 ;,但我暂时不能这样做)

我用以下方式调用它:

result=$(curl --noproxy $NO_PROXY --insecure -u $NEXUS_USERNAME:$NEXUS_PASSWORD -X POST --header 'Content-Type: application/json' $NEXUS_SCRIPT_ENDPOINT/test/run)
echo 'result:'
echo $result

结果(http 响应的内容)是:

result: { "name" : "testScript", "result" : "{\"keyValues\":{\"firstKey\":\"firstKey\",\"secondKey\":\"secondValue\"},\"someValues\":[\"test2\",\"test3\",\"test1\"]}" }


问题:

此响应有 2 个问题:

首先,所有转义双引号 \" 使得此响应不符合 JSON。我仍然可以使用 printf "$result" 来摆脱它们。所以结果是: 结果:

{
  "name" : "test",
  "result" : "{"keyValues":{"firstKey":"firstKey","secondKey":"secondValue"},"someValues":["test2","test3","test1"]}"
}

其次,结果的值总是被引用,见"result" : "{...}"应该是"result" : {...}。这使得它不 JSON 兼容。 returned 值似乎总是被解释为 Java/Groovy 字符串。所以我无法将 html 内容解析为 JSON 并执行 result.keyValues.firstKey 例如。

问题:

有没有办法使 returned html 响应成为有效的 JSON ,我可以在其中解析 result

您将 JSON 编码的字符串放入 JSON - 因此输出是预期的,当然是有效的 JSON。

如果 groovy 中处理您的 result 的任何内容无法 JSON 自行编码(例如 return listOfValues 而不是 result),你必须忍受你得到的回应。解码响应一次,然后再次解码 response.result