name | route | menu |
---|---|---|
Native Functions |
/jsonnet/native |
Writing Jsonnet |
Tanka extends Jsonnet using native functions, offering additional functionality not yet available in the standard library.
To use them in your code, you need to access them using std.native
from the standard library:
{
someField: std.native('<name>')(<arguments>),
}
std.native
takes the native function's name as a string
argument and returns a function
, which is called using the second set of parentheses.
parseJSON(string json) Object
parseJSON
parses a json string and returns the respective Jsonnet type (Object
, Array
, etc).
{
array: std.native('parseJson')('[0, 1, 2]'),
object: std.native('parseJson')('{ "foo": "bar" }'),
}
Evaluating with Tanka results in the JSON:
{
"array": [0, 1, 2],
"object": {
"foo": "bar"
}
}
parseYAML(string yaml) []Object
parseYAML
wraps yaml.Unmarshal
to convert a string of yaml document(s) into
a set of dicts. If yaml
only contains a single document, a single value array
will be returned.
{
yaml: std.native('parseYaml')(|||
---
foo: bar
---
bar: baz
|||),
}
Evaluating with Tanka results in the JSON:
{
"yaml": [
{
"foo": "bar"
},
{
"bar": "baz"
}
]
}
manifestJSONFromJSON(string json, int indent) string
manifestJSONFromJSON
reserializes JSON and allows to change the indentation.
{
indentWithEightSpaces: std.native('manifestJsonFromJson')('{ "foo": { "bar": "baz" } }', 8),
}
Evaluating with Tanka results in the JSON:
{
"indentWithEightSpaces": "{\n \"foo\": {\n \"bar\": \"baz\"\n }\n}\n"
}
manifestYAMLFromJSON(string json) string
manifestYamlFromJSON
serializes a JSON string as a YAML document.
{
yaml: std.native('manifestYamlFromJson')('{ "foo": { "bar": "baz" } }'),
}
Evaluating with Tanka results in the JSON:
{
"yaml": "foo:\n bar: baz\n"
}
escapeStringRegex(string s) string
escapeStringRegex
escapes all regular expression metacharacters and returns a
regular expression that matches the literal text.
{
escaped: std.native('escapeStringRegex')('"([0-9]+"'),
}
Evaluating with Tanka results in the JSON:
{
"escaped": "\"\\(\\[0-9\\]\\+\""
}
regexMatch(string regex, string s) boolean
regexMatch
returns whether the given string is matched by the given
RE2 regular expression.
{
matched: std.native('regexMatch')('.', 'a'),
}
Evaluating with Tanka results in the JSON:
{
"matched": true
}
regexSubst(string regex, string src, string repl) string
regexSubst
replaces all matches of the re2 regular expression with the
replacement string.
{
substituted: std.native('regexSubst')('p[^m]*', 'pm', 'poe'),
}
Evaluating with Tanka results in the JSON:
{
"substituted": "poem"
}