在上一篇中介紹了 xjson
的功能特性以及使用查詢語法快速方便的獲取 JSON
中的值。
同時這次也更新了一個版本,主要是兩個升級:
先說第一個跳脫字元,不管是原始 JSON
字串中存在跳脫字元,還是查詢語法中存在跳脫字元都已經支援,具體用法如下:
str = `{"1a.b.[]":"b"}`
get = Get(str, "1a\\.b\\.\\[\\]")
assert.Equal(t, get.String(), "b")
str = `{".":"b"}`
get = Get(str, "\\.")
assert.Equal(t, get.String(), "b")
str = `{"a":"{\"a\":\"123\"}"}`
get = Get(str, "a")
fmt.Println(get)
assert.Equal(t, get.String(), "{\"a\":\"123\"}")
assert.Equal(t, Get(get.String(), "a").String(), "123")
str = `{"a":"{\"a\":[1,2]}"}`
get = Get(str, "a")
fmt.Println(get)
assert.Equal(t, get.String(), "{\"a\":[1,2]}")
assert.Equal(t, Get(get.String(), "a[0]").Int(), 1)
效能也有部分優化,大約比上一版本提升了 30%。
pkg: github.com/crossoverJie/xjson/benckmark
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkDecode-12 14968 77130 ns/op 44959 B/op 1546 allocs/op
PASS
------------------------------------
pkg: github.com/crossoverJie/xjson/benckmark
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkDecode-12 19136 62960 ns/op 41593 B/op 1407 allocs/op
PASS
但總體來說還有不少優化空間,主要是上限畢竟低,和官方庫比還是有不小的差距。
接下來聊聊四則運算是如何實現的,這本身算是一個比較有意思的 feature
,雖然用的場景不多