BT

Experimente a nova interface visual do InfoQ! Veja o novo design do InfoQ 3.0 e nos diga o que você achou.

Google Propõe Melhorias para o JSON com Jsonnet

| por Abel Avram Seguir 12 Seguidores , traduzido por Roberto Pepato Seguir 33 Seguidores em 06 mai 2015. Tempo estimado de leitura: 2 minutos |

A Google abriu o código do Jsonnet, uma linguagem de configuração que substitui o JSON e adiciona novas funcionalidades sem quebra de compatibilidade com versões anteriores: comentários, referências, operadores aritméticos e condicionais, comprehension para matrizes e objetos, diretivas de importação, funções, variáveis locais, herança, dentre outras. Programas Jsonnet são convertidos para formatos de dados compatíveis com JSON.

Comentários: O Jsonnet aceita estilos de comentários nas notações das linguagens C (/* …. */) e C++ (//… ).

Referências: A palavra reservada self pode ser usada para referenciar o objeto corrente enquanto o operador $ referencia o objeto raiz.

Operadores Aritméticos e Condicionais: O operador + adiciona números, strings, matrizes e objetos. Os operadores == e != são avaliados como verdadeiro ou falso. A construção if funciona como o operador ternário ?: da linguagem C. A seguir estão algumas operações Jsonnet e código JSON resultante, obtido dos exemplos da linguagem:

// bar_menu.3.jsonnet
{
    foo: 3,     
    bar: 2 * self.foo,  // Multiplication.
    baz: "The value " + self.bar + " is "
         + (if self.bar > 5 then "large" else "small") + ".",
    array: [1, 2, 3] + [4],
    obj: {a: 1, b: 2} + {b: 3, c: 4},
    equality: 1 == "1",
}
{
   "foo": 3,
   "bar": 6,
   "baz": "The value 6 is large.",
   "array": [1, 2, 3, 4],
   "obj": {a: 1, b: 3, c: 4},
   "equality": false
}

Construindo Matrizes e Objetos: A construção for pode ser utilizada para construir matrizes e objetos como demonstrados no próximo exemplo:

{
    foo: [1, 2, 3],
    bar: [x * x for x in self.foo if x >= 2],
    baz: { ["field" + x]: x for x in self.foo },
    obj: { ["foo" + "bar"]: 3 },
}
{
   "foo": [ 1, 2, 3 ],
   "bar": [ 4, 9 ],
   "baz": {
      "field1": 1,
      "field2": 2,
      "field3": 3
   },
   "obj": { "foobar": 3 }
}

Modularidade: Com o Jsonnet o código pode ser separado em múltiplos arquivos que podem ser acessados usando a construção import. Os objetos importados são então concatenados utilizando o operador +.

Funções: Os valores de Jsonnet podem conter funções que são marcadas como campos ocultos e que não são traduzidos em JSON. Funções são utilizadas para avaliar diversas expressões. Um exemplo pode ser visto aqui.

O Jsonnet também permite a utilização de variáveis locais, uma forma de herdar objetos por meio de sua importação e utilização do operador de concatenação +, além de campos opcionais e campos calculados.

O Jsonnet é implementado em C++ 11 e disponibilizado em uma API C para facilitar a portabilidade para outras linguagens. Bibliotecas para C e Python estão disponíveis. A implementação C++ pode ser compilada para JavaScript com o Emscripten e um pacote nodejs não oficial foi disponibilizado.

Para maiores detalhes recomendamos conhecer a especificação da linguagem e a comparação com outras linguagens de configuração.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
BT