Контекст:
Я использую API сценариев Nexus для возврата некоторых данных. По некоторым причинам возвращаемые данные не соответствуют JSON. Я на Nexus PRO 3.20.1-01. Я не уверен, если это проблема с Nexus или моим сценарием.
Вот тестируемый образец Groovy, который можно развернуть на нексусе (скрипт называется 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"
, чтобы избавиться от них. Таким образом, результатом будет: result:
{
"name" : "test",
"result" : "{"keyValues":{"firstKey":"firstKey","secondKey":"secondValue"},"someValues":["test2","test3","test1"]}"
}
Во-вторых, значение результата всегда указывается в кавычках, см. "result" : "{...}"
, где оно должно быть "result" : {...}
. Что делает его не JSON совместимым. Кажется, что возвращаемое значение всегда интерпретируется как строка Java / Groovy. Поэтому я не могу проанализировать содержимое html как JSON и выполнить, например, result.keyValues.firstKey
.
Вопрос:
Есть ли способ сделать возвращенный ответ html a действительный JSON где я могу разобрать result
?