XJSON 是如何實現四則運算的?

2022-07-12 18:01:38

前言

上一篇中介紹了 xjson 的功能特性以及使用查詢語法快速方便的獲取 JSON 中的值。

同時這次也更新了一個版本,主要是兩個升級:

  1. 對跳脫字元的支援。
  2. 效能優化,大約提升了30%⬆️。

跳脫字元

先說第一個跳脫字元,不管是原始 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,雖然用的場景不多