Pular para o conteúdo principal

edit-json

Nesta seção, você encontra a referência de um Hook Declarativo do tipo edit-json.


Um Hook Declarativo do tipo edit-json define alterações realizadas em arquivos JSON existentes. Veja um exemplo de definição de um Hook Declarativo do tipo edit-json:

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

Ações Disponíveis

path:

Define o caminho do arquivo que será editado. O caminho pode ser composto por expressões Jinja.

path: package.json

trigger:

Campo para definir gatilhos que informam o momento em que a edição de arquivos deve ocorrer.

before-input:
Executa o Hook Declarativo antes de receber os parâmetros de entrada da pessoa usuária.

trigger: before-input

before-render:
Executa o Hook Declarativo antes de o Template gerar arquivos no projeto.

trigger: before-render

after-render:
Executa o Hook Declarativo após o Template gerar arquivos no projeto.

trigger: after-render

encoding:

Define o tipo de codificação a ser gravado no arquivo e aceita os formatos ascii, utf-8 e utf-16. O valor padrão é utf-8.

encoding: utf-8

indent:

Define o(s) caractere(s) ou número de espaços para a indentação do documento gerado. O valor padrão de espaços é 2.

indent: "\t"

changes:

É uma lista de ações de edição que serão executadas na ordem em que aparecem. O bloco tem como parâmetro obrigatório o campo jsonpath.

informação

Durante o processo de pesquisa no atributo changes, todos os nós que correspondem aos critérios (atributo jsonpath) são alterados de uma só vez. Você pode fazer várias alterações em um arquivo apenas usando expressões.

Confira algumas expressões aceitas:

Confira as expressões detalhadas
ExpressãoDescrição
@Define o objeto do elemento atual.
$Define o objeto do elemento raiz.
()Expressão de script, usando o mecanismo de script subjacente.
[início:fim]Retorna uma cópia de parte de um array criada entre as posições inicial e final (final não incluído) de um array original.
?()Aplica o filtro à expressão do script.
[]Operador filho usado em expressões.
..Descida recursiva.
*Usado em elementos de objeto independentemente do uso de seus nomes.
[]Em JSON e JavaScript, é o operador de array nativo.
[,]O caminho JSON permite um conjunto de índices e nomes de array.

jsonpath:

Permite inserir a expressão de busca em JSON. O uso é obrigatório.

changes:
- jsonpath: "$.packages.version"
...

Se necessário, consulte o suporte de JSONPath.

É possível interpolar os valores do campo jsonpath com 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:
Altera ou acrescenta um item dentro de um resultado de um jsonpath. Os campos disponíveis são value ou snippet.

value
Recebe o valor a ser adicionado ao JSON.

update:
value: "qa"

snippet
Recebe o snippet a ser adicionado ao JSON.

update:
snippet: snippets/fragment.json

remove:
Remove um elemento de dicionário. O campo disponível é o name.

name:
Recebe o nome do elemento a ser removido do dicionário JSON. É possível interpolar os valores do campo name com Jinja.

- jsonpath: "$.scripts"
remove:
- name: prepare

clear:
Remove todo o conteúdo do nó JSON, dado o contexto do jsonpath. Os valores aceitos são true ou false.

- jsonpath: "$.devDependencies"
clear: true

when:

Ação condicional que avalia se a inserção será efetivada. A opção disponível é not-exists, que recebe o texto ou arquivo a ser avaliado pela condição.

not-exists:
Verifica se os valores informados no campo value existem no arquivo. Caso existam, as ações update, remove e clear não serão efetivadas.

hooks:
- type: edit-json
jsonpath: "$.some"
update:
value: |
{
"not-existing": {
"item": 2
}
}
when:
not-exists: "$.some.not-existing"