go裡面如何將[]int json序列化為[]string?
背景
有時我們會遇到必須用 int64 的情景 (snowflake id 等),這個時候會遇到一個很尷尬的問題,就是 js 的 number 型別最大隻支援 2^53,就會出現精度丟失的情況,這個時候最好是用 string 與前端互動比較合適。
對於單一的 int 序列化為 string
type Demo struct {
ID int64 `json:"id,string"`
}
注意 json tag 以下的用法:
"json"標籤的用法:
1、json:"-"
:編碼的時候會忽略這個欄位。
2、json:"newName"
:指定欄位在 JSON 字串的 key 名字。
3、json:"newName,omitempty"
:如果這個欄位是空值,則不編碼到 JSON 裡面,否則用 newName 為名字編碼。
4、json:",omitempty"
:同上,不為空的話,這個欄位的 key 還是用預設的 struct 欄位名。
5、json:",string"
:編碼成字串,這個 string 選項只適用字串,浮點型和整型資料。
struct 欄位需要可匯出才能編碼成 json,否則會忽略。
將 [] int 序列化為 [] string
這裡就需要用到自定義序列化,也就是實現 json/encode 裡面的 MarshalJson 和 UnmarshalJson 方法。
package main
import (
"encoding/json"
"fmt"
"strconv"
"strings"
)
/*
* @Author:hanyajun
* @Date:2019/8/6 10:21
* @Name:json
* @Function:
*/
type IntString int64
type RequestParam struct {
LoadWaybills []IntString `json:"load_waybills"`
}
func (i IntString) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf("\"%v\"", i)), nil
}
func (i *IntString) UnmarshalJSON(value []byte) error {
m, err := strconv.ParseInt(string(value[1:len(value)-1]), 10, 32)
if err != nil {
return err
}
*i = IntString(m)
return nil
}
func main() {
var a int64 = 90
var result = &RequestParam{LoadWaybills: []IntString{IntString(a), 123}}
b, _ := json.Marshal(result)
fmt.Printf("marshal result:%s\n", b)
var result2 RequestParam
_ = json.Unmarshal(b, &result2)
fmt.Printf("unmarshal result:%v", result2.LoadWaybills)
}
輸出結果
marshal result:{"load_waybills":["123","567"]}
unmarshal result:[90 123]
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- JSON序列化時將BigDecimal型別轉換成String型別JSONDecimal型別
- String轉化為Int 視訊演示
- BigDecimal轉為String型別、int型別Decimal型別
- 如何在Java中將double轉換為int?Java
- JavaScript物件序列化為JSONJavaScript物件JSON
- SparkSQL,如何將DataFrame轉為json格式SparkSQLJSON
- python json反序列化為物件PythonJSON物件
- 如何將Excel檔案解析為json格式ExcelJSON
- Spark SQL,如何將 DataFrame 轉為 json 格式SparkSQLJSON
- es6將txt資料序列化成jsonJSON
- 型別轉換(int 和 String)型別
- 如何使用 System.Text.Json 序列化 DateTimeOffset 為 Unix 時間戳JSON時間戳
- 如何控制 Go 編碼 JSON 資料時的行為GoJSON
- JAVA 中 string 和 int 互相轉化Java
- 如何保持json序列化的順序性?JSON
- C#支援將json中的多種型別反序列化為object型別C#JSON型別Object
- FastJSON解析Json字串(反序列化為List、Map)ASTJSON字串
- JSON-B:簡化 JSON 序列化和反序列化JSON
- Kotlin Json 序列化KotlinJSON
- 將json資料轉換為Python字典將json資料轉換為Python字典JSONPython
- 切片去重(string,int型別去重)型別
- Go - 如何解析 JSON 資料?GoJSON
- Java中將 int[] 陣列 轉換為 List(ArrayList)Java陣列
- Go 語言 big.IntGo
- Go 中時間型別欄位的 JSON 序列化和反序列化的處理技巧Go型別JSON
- Newtonsoft.Json序列化JSON字串問題JSON字串
- 將物件解析為JSON資料和將JSON資料解析為物件的簡單例項物件JSON單例
- 【java】int轉換成String的四種方法Java
- Go語言結構體鏈式程式設計與JSON序列化Go結構體程式設計JSON
- 將輸入的字元轉化為int格式輸出字元
- Flutter中JSON序列化與反序列化FlutterJSON
- C#序列化和反序列化(json)C#JSON
- java將物件轉為json的方式Java物件JSON
- C# Json反序列化C#JSON
- 如何在 Go 中將 []byte 轉換為 io.Reader?Go
- 序列化與反序列化(GO)Go
- json-to-goJSONGo