mirror of
https://github.com/google/go-jsonnet.git
synced 2025-09-28 17:01:02 +02:00
std.parseJson - a builtin for parsing json
This commit is contained in:
parent
7012604878
commit
767f100fd6
16
builtins.go
16
builtins.go
@ -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
10
testdata/parseJson.golden
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"aaa": { },
|
||||
"foo": "bar",
|
||||
"xxx": [
|
||||
42,
|
||||
"asdf",
|
||||
{ }
|
||||
],
|
||||
"ąę": "ćż"
|
||||
}
|
12
testdata/parseJson.jsonnet
vendored
Normal file
12
testdata/parseJson.jsonnet
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
std.parseJson(
|
||||
'{
|
||||
"foo": "bar",
|
||||
"aaa": {},
|
||||
"ąę": "ćż",
|
||||
"xxx": [
|
||||
42,
|
||||
"asdf",
|
||||
{}
|
||||
]
|
||||
}',
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user