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型別字串
- 如何在Java中將double轉換為int?Java
- JSON序列化時將BigDecimal型別轉換成String型別JSONDecimal型別
- Swift Int to StringSwift
- JavaScript物件序列化為JSONJavaScript物件JSON
- BigDecimal轉為String型別、int型別Decimal型別
- SparkSQL,如何將DataFrame轉為json格式SparkSQLJSON
- 如何將Excel檔案解析為json格式ExcelJSON
- Spark SQL,如何將 DataFrame 轉為 json 格式SparkSQLJSON
- [Linux]變數加減賦值以及將String轉intLinux變數賦值
- python json反序列化為物件PythonJSON物件
- es6將txt資料序列化成jsonJSON
- Python序列化模型資料為JSONPython模型JSON
- JDynamic:支援Json反序列化為Dynamic物件JSON物件
- 如何控制 Go 編碼 JSON 資料時的行為GoJSON
- 如何使用 System.Text.Json 序列化 DateTimeOffset 為 Unix 時間戳JSON時間戳
- 型別轉換(int 和 String)型別
- C# int與string轉化C#
- C#支援將json中的多種型別反序列化為object型別C#JSON型別Object
- 如何保持json序列化的順序性?JSON
- Java中將 int[] 陣列 轉換為 List(ArrayList)Java陣列
- JSON 物件序列化、反序列化JSON物件
- JSON-B:簡化 JSON 序列化和反序列化JSON
- JAVA 中 string 和 int 互相轉化Java
- C++ int與string的轉化C++
- C++ int 轉 string (使用stringstream)C++
- Go 中時間型別欄位的 JSON 序列化和反序列化的處理技巧Go型別JSON
- Go - 如何解析 JSON 資料?GoJSON
- 將輸入流InputStream轉換為String
- FastJSON解析Json字串(反序列化為List、Map)ASTJSON字串
- 將php的session存放到redis裡面PHPSessionRedis
- 將輸入的字元轉化為int格式輸出字元
- 序列化與反序列化(GO)Go
- json convert to stringJSON
- 切片去重(string,int型別去重)型別
- Laravel 裡面用swoole的協程go報錯 ?LaravelGo
- Go語言結構體鏈式程式設計與JSON序列化Go結構體程式設計JSON
- 將物件解析為JSON資料和將JSON資料解析為物件的簡單例項物件JSON單例