std.parseJson - a builtin for parsing json

This commit is contained in:
Stanisław Barzowski 2018-09-18 21:07:40 -06:00 committed by Dave Cunningham
parent 7012604878
commit 767f100fd6
3 changed files with 38 additions and 0 deletions

View File

@ -20,6 +20,7 @@ import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"math"
"os"
@ -775,6 +776,20 @@ func builtinUglyObjectFlatMerge(i *interpreter, trace TraceElement, x value) (va
), nil
}
func builtinParseJSON(i *interpreter, trace TraceElement, str value) (value, error) {
sval, err := i.getString(str, trace)
if err != nil {
return nil, err
}
s := sval.getString()
var parsedJSON interface{}
err = json.Unmarshal([]byte(s), &parsedJSON)
if err != nil {
return nil, i.Error(fmt.Sprintf("failed to parse JSON: %v", err.Error()), trace)
}
return jsonToValue(i, trace, parsedJSON)
}
func builtinExtVar(i *interpreter, trace TraceElement, name value) (value, error) {
str, err := i.getString(name, trace)
if err != nil {
@ -1000,6 +1015,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
&binaryBuiltin{name: "modulo", function: builtinModulo, parameters: ast.Identifiers{"x", "y"}},
&unaryBuiltin{name: "md5", function: builtinMd5, parameters: ast.Identifiers{"x"}},
&ternaryBuiltin{name: "strReplace", function: builtinStrReplace, parameters: ast.Identifiers{"str", "from", "to"}},
&unaryBuiltin{name: "parseJson", function: builtinParseJSON, parameters: ast.Identifiers{"str"}},
&unaryBuiltin{name: "native", function: builtinNative, parameters: ast.Identifiers{"x"}},
// internal

10
testdata/parseJson.golden vendored Normal file
View File

@ -0,0 +1,10 @@
{
"aaa": { },
"foo": "bar",
"xxx": [
42,
"asdf",
{ }
],
"ąę": "ćż"
}

12
testdata/parseJson.jsonnet vendored Normal file
View File

@ -0,0 +1,12 @@
std.parseJson(
'{
"foo": "bar",
"aaa": {},
"ąę": "ćż",
"xxx": [
42,
"asdf",
{}
]
}',
)