From bfe89e0b12adce04d9b84e6cf4d9e8914a90faeb Mon Sep 17 00:00:00 2001 From: John Date: Sat, 28 Nov 2020 22:48:01 +0800 Subject: [PATCH] add build-in fuction json for package gview --- os/gview/gview.go | 1 + os/gview/gview_buildin.go | 8 ++++++++ os/gview/gview_unit_basic_test.go | 12 ++++++++++++ 3 files changed, 21 insertions(+) diff --git a/os/gview/gview.go b/os/gview/gview.go index 58208e4ab..0112ac00f 100644 --- a/os/gview/gview.go +++ b/os/gview/gview.go @@ -137,6 +137,7 @@ func New(path ...string) *View { "dump": view.buildInFuncDump, "map": view.buildInFuncMap, "maps": view.buildInFuncMaps, + "json": view.buildInFuncJson, }) return view diff --git a/os/gview/gview_buildin.go b/os/gview/gview_buildin.go index 4af4cfd04..fc4f8f697 100644 --- a/os/gview/gview_buildin.go +++ b/os/gview/gview_buildin.go @@ -8,6 +8,7 @@ package gview import ( "fmt" + "github.com/gogf/gf/internal/json" "github.com/gogf/gf/util/gutil" "strings" @@ -215,3 +216,10 @@ func (view *View) buildInFuncToLower(str interface{}) string { func (view *View) buildInFuncNl2Br(str interface{}) string { return gstr.Nl2Br(gconv.String(str)) } + +// buildInFuncJson implements build-in template function: json , +// which encodes and returns as JSON string. +func (view *View) buildInFuncJson(value interface{}) (string, error) { + b, err := json.Marshal(value) + return gconv.UnsafeBytesToStr(b), err +} diff --git a/os/gview/gview_unit_basic_test.go b/os/gview/gview_unit_basic_test.go index 0fcab287d..afca128ed 100644 --- a/os/gview/gview_unit_basic_test.go +++ b/os/gview/gview_unit_basic_test.go @@ -400,3 +400,15 @@ func Test_BuildInFuncDump(t *testing.T) { t.Assert(gstr.Contains(r, `"score": 100`), true) }) } + +func Test_BuildInFuncJson(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + v := gview.New() + v.Assign("v", g.Map{ + "name": "john", + }) + r, err := v.ParseContent("{{json .v}}") + t.Assert(err, nil) + t.Assert(r, `{"name":"john"}`) + }) +}