json Unmarshal時實際欄位型別與struct定義不一致會影響其他正常欄位解析
json Unmarshal 時實際欄位型別與 struct 定義不一致會影響其他正常欄位解析? 見程式碼
package main
import (
"encoding/json"
"fmt"
)
type Role struct {
Attr struct {
Lv int64 `json:"lv"`
Money int64 `json:"money"`
} `json:"attr"`
Net struct {
Ip string `json:"ip"`
Mac string `json:"mac"`
} `json:"net"`
}
func main() {
str := `{"attr":{"lv":15,"money":3},"net":{"ip":"8.8.8.8","mac":0}}`
str2 := `{"net":{"ip":"8.8.8.8","mac":0},"attr":{"lv":15,"money":3}}`
logData := &Role{}
logData2 := &Role{}
err := json.Unmarshal([]byte(str), logData)
err2 := json.Unmarshal([]byte(str2), logData2)
fmt.Printf("%#v\r\n", logData)
fmt.Println(logData)
fmt.Println(err)
fmt.Printf("%#v\r\n", logData2)
fmt.Println(logData2)
fmt.Println(err2)
}
輸出結果是
&main.Role{Attr:struct { Lv int64 "json:\"lv\""; Money int64 "json:\"money\"" }{Lv:15, Money:3}, Net:struct { Ip string "json:\"ip\""; Mac string "json:\"mac\"" }{Ip:"8.8.8.8", Mac:""}}
&{{15 3} {8.8.8.8 }}
json: cannot unmarshal number into Go struct field .mac of type string
&main.Role{Attr:struct { Lv int64 "json:\"lv\""; Money int64 "json:\"money\"" }{Lv:0, Money:0}, Net:struct { Ip string "json:\"ip\""; Mac string "json:\"mac\"" }{Ip:"8.8.8.8", Mac:""}}
&{{0 0} {8.8.8.8 }}
json: cannot unmarshal number into Go struct field .mac of type string
可以看到,struct 的 mac 是 string 型別的,實際的 json 字串中 mac 因為一些不可控的原因等於 int 0 測試中發現解析發生錯誤後,後面的所有 key 都無法解析了,但是在實際專案中,json 產出資料不可控,是否有辦法跳過錯誤繼續處理呢
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- MySQL欄位型別最全解析MySql型別
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- sql語句修改欄位型別和增加欄位SQL型別
- 新增欄位對SQL的影響SQL
- JSON欄位型別在ORM中的使用JSON型別ORM
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- MongoDB更改欄位型別MongoDB型別
- oracle的欄位型別Oracle型別
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- 物件型介面 / 定製操作型別和欄位物件型別
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- date、timestamp欄位型別型別
- MySQL欄位型別小記MySql型別
- 資料欄位型別匹配型別
- 修改表的欄位型別型別
- sqlite sql 修改欄位型別SQLite型別
- Mysql varchar型別欄位為什麼經常定義為255MySql型別
- 欄位管理,為什麼只有新增的時候才自動匹配欄位型別型別
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- 修改欄位長度應用會影響到生產效能
- MySQL VARCHAR型別欄位到底可以定義多長MySql型別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- 聯機重定義修改欄位型別(NVARCHAR2->VARCHAR2)型別
- 【mongo】mongo 欄位型別互轉Go型別
- [轉]MySQL 欄位型別參考MySql型別
- MongoDB中的欄位型別IdMongoDB型別
- oracle 修改欄位型別的方法Oracle型別
- 欄位型別檢測指令碼型別指令碼
- 比較所有的欄位型別型別
- 多型關聯自定義的型別欄位的處理多型型別
- 觸發器—一個表插入資料時其他欄位同步自增長欄位觸發器
- sqlserver查詢一個庫所有表的欄位名及欄位型別SQLServer型別
- SQL Server中text型別匯入oracle clob欄位時的設定SQLServer型別Oracle
- 將多個JSON欄位對映到單個Java欄位JSONJava
- Oracle 修改欄位型別和長度Oracle型別
- ES Mapping ,1 欄位型別APP型別
- mysql表操作(alter)/mysql欄位型別MySql型別
- 修改欄位資料型別的方法資料型別