edit-json
In this section, you will find: Reference of a Declarative Hook of the type
edit-json.
A Declarative Hook of the edit-json type defines changes made to existing JSON files. Check below for an example of a Declarative Hook definition of the edit-json type:
name: "hook-edit-json"
description: Test edit-json in hooks
types:
- app
spec:
inputs:
- label: Just a text
type: text
name: json_body
- label: Just a Tag
type: text
name: json_tag
hooks:
- type: edit-json
trigger: after-render
path: package.json
indent: "\t"
encoding: utf-8
changes:
- jsonpath: "$.scripts"
update:
value: |
{
"test": "ola 123",
"ola": "como vai vocĂȘ"
}
- jsonpath: "$"
remove:
- name: private
- name: devDependencies
- jsonpath: "$.log"
clear: true
Available Actions
path:
Defines the path of the file that will be edited. The path can be composed of Jinja expressions.
path: package.json
trigger:
Field to set triggers that inform the moment when file editing should occur.
before-input:
Executes the Declarative Hook before receiving the input parameters from the user person.
trigger: before-input
before-render:
Executes the Declarative Hook before the Template generates files in the project.
trigger: before-render
after-render:
Executes the Declarative Hook after the Template generates files in the project.
trigger: after-render
enconding:
This sets the encoding type to be written to the file, and accepts the formats [ascii, utf-8, utf-16]. The default value is utf-8.
encoding: utf-8
indent:
Defines the character(s) or number of spaces for the indentation of the generated document. The default value for spaces is 2.
indent: "\t"
changes:
It's a list of editing actions that will be executed in the order they appear. And its block has as required parameter jsonpath.
During the search process on the changes attribute, all nodes that match the criteria (jsonpath attribute) are changed at once. You can make multiple changes to a file just by using expressions.
Check out some of the supported expressions:
Click here to check the expressions!
| Expression | Description |
|---|---|
@ | Defines the object of the current element. |
$ | Defines the object of the root element. |
() | This is a script expression using the underlying script engine. |
[inĂcio:fim] | Returns a copy of part of an array from a subarray created between the start and end positions (the end is not included) of an original array. |
?() | Applies the filter to the script expression. |
[] | This is a child operator that was used in expressions. |
.. | This is a recursive descent. |
* | It's used on object elements regardless of whether you use their names. |
[] | In Json and Javascript, it is the native array operator. |
[,] | The Json path allows us a set of indexes and array names. |
jsonpath:
Allows to insert the JSON search language. Its use is Mandatory.
changes:
- jsonpath: "$.packages.version"
...
If necessary, check the Jsonpath Support
You can interpolate the values of the xpath field with Jinja:
hooks:
- type: edit-json
trigger: after-render
path: package.json
indent: "\t"
encoding: utf-8
changes:
- jsonpath: "$.scripts[?name = '{{INTERPOLAR-INPUT-AQUI}}']"
update:
value: |
{
"test": "ola 123",
"ola": "como vai vocĂȘ"
}
update:
Changes or adds an item within a jsonpath result. Available fields are value or snippet.
value
Receives the value to be added to JSON.
update:
value: "qa"
snippet
Receives the snippet to be added to JSON.
update:
snippet: snippets/fragment.json
remove:
Removes a dictionary element. The available field is the name.
name:
Gets the name of the element to be removed from the JSON dictionary. You can interpolate the values of the name field with Jinja.
- jsonpath: "$.scripts"
remove:
- name: prepare
clear:
Removes all content from the JSON node, given the jsonpath context. Accepted values are true or false.
- jsonpath: "$.devDependencies"
clear: true
when:
Conditional action that evaluates if the insertion will take place. The available option is not-exists, which receives the text or file to be evaluated by the condition.
not-exists:
Check whether the values entered in the value field exist in the file. If it exists, the update, remove, and clear actions will not be performed.
hooks:
- jsonpath: "$.some"
update:
value: |
{
"not-existing": {
"item": 2
}
}
when:
not-exists: "$.some.not-existing"