Je dois créer ce fichier JSON dans Groovy . J'ai essayé plusieurs choses (JsonOutput.toJson()
/JsonSlurper.parseText()
) sans succès.
{
"attachments":[
{
"fallback":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
"pretext":"New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
"color":"#D00000",
"fields":[
{
"title":"Notes",
"value":"This is much easier than I thought it would be.",
"short":false
}
]
}
]
}
Ceci est pour poster un message de construction Jenkins à Slack.
JSON est un format qui utilise du texte lisible par l'homme pour transmettre des objets de données constitués de paires attribut-valeur et de types de données array . Donc, en général, json est un texte formaté.
Dans groovy json, l’objet n’est qu’une séquence de cartes/tableaux.
analyse de Json avec JsonSlurperClassic
//use JsonSlurperClassic because it produces HashMap that could be serialized by pipeline
import groovy.json.JsonSlurperClassic
node{
def json = readFile(file:'message2.json')
def data = new JsonSlurperClassic().parseText(json)
echo "color: ${data.attachments[0].color}"
}
analyser JSON en utilisant pipeline
node{
def data = readJSON file:'message2.json'
echo "color: ${data.attachments[0].color}"
}
construisant json à partir du code et l'écrit dans le fichier
import groovy.json.JsonOutput
node{
//to create json declare a sequence of maps/arrays in groovy
//here is the data according to your sample
def data = [
attachments:[
[
fallback: "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
pretext : "New open task [Urgent]: <http://url_to_task|Test out Slack message attachments>",
color : "#D00000",
fields :[
[
title: "Notes",
value: "This is much easier than I thought it would be.",
short: false
]
]
]
]
]
//two alternatives to write
//native pipeline step:
writeJSON(file: 'message1.json', json: data)
//but if writeJSON not supported by your version:
//convert maps/arrays to json formatted string
def json = JsonOutput.toJson(data)
//if you need pretty print (multiline) json
json = JsonOutput.prettyPrint(json)
//put string into the file:
writeFile(file:'message2.json', text: json)
}
J'ai trouvé cette question alors que j'essayais de faire quelque chose (je croyais) devrait être simple à faire, mais cela n'a pas été abordé dans l'autre réponse. Si le JSON est déjà chargé en tant que chaîne dans une variable, comment le convertissez-vous en objet natif? Évidemment, vous pourriez faire new JsonSlurperClassic().parseText(json)
comme le suggère l'autre réponse, mais il y a une manière native de faire cela:
node () {
def myJson = '{"version":"1.0.0"}';
def myObject = readJSON text: myJson;
echo myObject.version;
}
J'espère que ça aide quelqu'un.
Edit: Comme expliqué dans les commentaires, "natif" n’est pas tout à fait exact.
Cela retournera la valeur de la "version" du fichier jsonFile:
def getVersion(jsonFile){
def fileContent = readFile "${jsonFile}"
Map jsonContent = (Map) new JsonSlurper().parseText(fileContent)
version = jsonContent.get("version")
return version
}