目錄golang預設的結構體json轉碼出來,都是根據欄位名生成的大寫駝峰格式,但是一般我們最常用的json格式是小寫駝峰或者小寫下劃線,因此,我們非常需要乙個統一的方法去轉換,而不想挨個寫json標籤,例如
package main
import (
"encoding/json"
"fmt"
)func main()
var a = person
res, _ := json.marshal(a)
fmt.printf("%s", res)
}
執行結果
輸出來的json結構是大寫駝峰的,肯定非常彆扭,當然 ,我們通過設定json
標籤來設定輸出的json欄位名,例如
type person struct
但是如果字段特別多,需要挨個設定也太麻煩了。
golang 的標準 json 在處理各種資料型別是都是呼叫其型別介面unmarshaljson
解碼和marshaljson
編碼進行轉換的,所以我們可以封裝乙個統一轉換下劃線的json結構體或統一轉換駝峰的json結構體,並實現marshaljson
方法,就可以達到目的。
實現如下
package jsonconv
import (
"bytes"
"encoding/json"
"log"
"regexp"
"strconv"
"strings"
"unicode"
)/*************************************** 下劃線json ***************************************/
type jsonsnakecase struct
}func (c jsonsnakecase) marshaljson() (byte, error) _$`),
))},
) return converted, err
}/*************************************** 駝峰json ***************************************/
type jsoncamelcase struct
}func (c jsoncamelcase) marshaljson() (byte, error) ,
) return converted, err
}/*************************************** 其他方法 ***************************************/
// 駝峰式寫法轉為下劃線寫法
func camel2case(name string) string
} else
} return buffer.string()
}// 下劃線寫法轉為駝峰寫法
func case2camel(name string) string
// 首字母大寫
func ucfirst(str string) string
return ""
}// 首字母小寫
func lcfirst(str string) string
return ""
}// 內嵌bytes.buffer,支援連寫
type buffer struct
func newbuffer() *buffer
} switch val := i.(type)
return b
} defer func()
}()b.writestring(s)
return b
}
使用jsonconv.jsonsnakecase
包裹一下要輸出json的物件即可
func main()
var a = person
res, _ := json.marshal(jsonconv.jsonsnakecase)
fmt.printf("%s", res)
}
輸出如下
已經指定了下劃線標籤的結構體,我們也可以統一轉為駝峰的json
func main()
var a = person
res, _ := json.marshal(jsonconv.jsoncamelcase)
fmt.printf("%s", res)
}
輸出如下
非常方便的解決了json統一轉碼格式的需求 駝峰式變數名轉下劃線式 python
最簡單的思路 唯一需要考慮,是直接複製當前字元,還是先加 再複製當前字元。usr bin env python3 defchange variable name listx listy listx 0 for i in range 1 len listx listx i 直接copy 或 先加 再c...
下劃線屬性駝峰對映實體類引數json
有時候通過feign會接收到老系統發來的實體類,和資料庫保持一致,都是下劃線的屬性名,而你需要駝峰對映,你拿到的只是原始資料,網上很多辦法,取字段轉換屬性名,利用註解對映,或者設定工具類之類的,我覺得都比較麻煩,上手程度慢,所以使用了一種簡單方式,json轉換!可以直接自動駝峰對映 before c...
go語言編碼規範
1.規範 1.規範 型別標識 例子int i i icount icount bool b b bshow bshow string s s sname sname uint u u ucolor ucolor float f f fplace fplace pointer p p pname pn...