無法將 json 範圍讀取為 pgtype.Int4range
php小編百草在使用PHP與PostgreSQL資料庫時,可能會遇到一個錯誤提示:「無法將 json 範圍讀取為 pgtype.Int4range」。這個錯誤通常發生在嘗試將JSON資料型別轉換為pgtype.Int4range資料型別時。這個問題的解決方法並不複雜,只需要將JSON資料轉換為字串,然後再進行資料類型轉換。接下來,我們將詳細介紹如何解決這個問題。
問題內容
我正在嘗試將範圍讀取為 json,但在執行 json.unmarshal 時遇到問題。
這是一個測試程式碼-
import ( "encoding/json" "testing" "github.com/jackc/pgtype" "github.com/stretchr/testify/assert" ) type testhealthpreference struct { healthrange pgtype.int4range `json:"health_range"` id string `json:"id"` } // just a test to make sure unmarshaling works func testpreferenceupdateunmarshal(t *testing.t) { jsondata := `{ "health_range": "[20,30)", "id": "123" }` var update testhealthpreference err := json.unmarshal([]byte(jsondata), &update) if err != nil { t.errorf("error while unmarshalling json: %v", err) } assert.equal(t, 20, update.healthrange.lower) }
錯誤-
Error while unmarshalling JSON: json: cannot unmarshal string into Go struct field TestPreference.health_range of type pgtype.Int4range.
是否可以將其讀取為 pgtype.int4range?我猜這種類型僅供資料庫使用? fwiw,我正在使用pgx github.com/jackc/pgx/v4
解決方法
它不起作用,因為"[20,30)"
不是結構pgtype.int4range
的有效json 值,且pgtype.int4range 尚未實作json.unmarshaler 介面。
您必須自己實作介面來解組 "[20,30)"
:
type myint4range pgtype.int4range func (r *myint4range) unmarshaljson(b []byte) error { return (*pgtype.int4range)(r).decodetext(nil, bytes.trim(b, `"`)) }
順便說一句
assert.equal(t, 20, update.healthrange.lower)
比較兩種不同的類型,應更正為:
assert.Equal(t, int32(20), update.HealthRange.Lower.Int)
在此處查看完整演示:https://www.php.cn/link/fbf6e9ffad68f73e466198206987dedc一个>.
以上是無法將 json 範圍讀取為 pgtype.Int4range的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

OpenSSL,作為廣泛應用於安全通信的開源庫,提供了加密算法、密鑰和證書管理等功能。然而,其歷史版本中存在一些已知安全漏洞,其中一些危害極大。本文將重點介紹Debian系統中OpenSSL的常見漏洞及應對措施。 DebianOpenSSL已知漏洞:OpenSSL曾出現過多個嚴重漏洞,例如:心臟出血漏洞(CVE-2014-0160):該漏洞影響OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻擊者可利用此漏洞未經授權讀取服務器上的敏感信息,包括加密密鑰等。

後端學習路徑:從前端轉型到後端的探索之旅作為一名從前端開發轉型的後端初學者,你已經有了nodejs的基礎,...

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

在BeegoORM框架下,如何指定模型關聯的數據庫?許多Beego項目需要同時操作多個數據庫。當使用Beego...

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...
