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"
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
@ -775,6 +776,20 @@ func builtinUglyObjectFlatMerge(i *interpreter, trace TraceElement, x value) (va
|
|||||||
), nil
|
), 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) {
|
func builtinExtVar(i *interpreter, trace TraceElement, name value) (value, error) {
|
||||||
str, err := i.getString(name, trace)
|
str, err := i.getString(name, trace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1000,6 +1015,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
|
|||||||
&binaryBuiltin{name: "modulo", function: builtinModulo, parameters: ast.Identifiers{"x", "y"}},
|
&binaryBuiltin{name: "modulo", function: builtinModulo, parameters: ast.Identifiers{"x", "y"}},
|
||||||
&unaryBuiltin{name: "md5", function: builtinMd5, parameters: ast.Identifiers{"x"}},
|
&unaryBuiltin{name: "md5", function: builtinMd5, parameters: ast.Identifiers{"x"}},
|
||||||
&ternaryBuiltin{name: "strReplace", function: builtinStrReplace, parameters: ast.Identifiers{"str", "from", "to"}},
|
&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"}},
|
&unaryBuiltin{name: "native", function: builtinNative, parameters: ast.Identifiers{"x"}},
|
||||||
|
|
||||||
// internal
|
// 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