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"