Skip to main content

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.

info

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!
ExpressionDescription
@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"