json - Nexus 脚本不返回有效的 JSON
问题描述
语境:
我正在使用nexus 脚本 API返回一些数据。出于某种原因,返回的数据不符合 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响应的内容)是:
结果:{“名称”:“testScript”,“结果”:“{\”keyValues\”:{\“firstKey\”:\“firstKey\”,\“secondKey\”:\“secondValue\”},\ "someValues\":[\"test2\",\"test3\",\"test1\"]}" }
问题:
此响应有两个问题:
首先,所有转义的双引号\"
使此响应不符合 JSON 标准。我仍然可以printf "$result"
用来摆脱它们。所以结果是: 结果:
{
"name" : "test",
"result" : "{"keyValues":{"firstKey":"firstKey","secondKey":"secondValue"},"someValues":["test2","test3","test1"]}"
}
其次, result 的值总是被引用,看"result" : "{...}"
它应该在哪里"result" : {...}
。这使得它不符合 JSON。似乎返回的值总是被解释为 Java/Groovy 字符串。因此,我无法将 html 内容解析为 JSON,result.keyValues.firstKey
例如。
问题:
有没有办法让返回的 html 响应成为我可以解析的有效 JSON result
?
解决方案
您将 JSON 编码的字符串放入 JSON 中 - 因此输出是预期的,当然是有效的 JSON。
如果处理你result
from groovy 的任何东西都不能对它本身进行 JSON 编码(例如 returnlistOfValues
而不是result
),你必须忍受你得到的响应。将响应解码一次,然后response.result
再次解码。
推荐阅读
- javascript - JavaScript 从对象中选择一部分变量
- ios - 构建应用程序后未显示 Xcode13 应用程序图标
- r - scales = "free" 对 facet_grid 没有影响
- javascript - 如何使用 NodeJS 在 Mongodb 中使用 updateOne
- c++ - 从返回不完整输出的未排序链表中删除重复项
- tensorflow - 验证集和测试集的结果不同
- python - 如何在 Python 中的每个循环周期后获取下一个 n[0:1] 字母?
- actionscript-3 - 我如何使用以下课程?我应该在我的 .fla 文件中写什么?
- javascript - 当我使用部分网站崩溃
- php - 每当一个新用户注册时,他一直在我的 php 项目中看到另一个用户输入的数据