ユニコードキャラクタをエスケープシーケンスに変換 - golang

2020-06-12

json.Unmarshalしたデータに含まれる文字列のユニコードキャラクタをエスケープシーケンスに変換します。

//
func convertJsonElement(data interface{}) interface{} {
	switch v := data.(type) {
	case map[string]interface{}:
		for ik, iv := range v {
			v[ik] = convertJsonElement(iv)
		}
		data = v
	case []interface{}:
		for ik, iv := range v {
			v[ik] = convertJsonElement(iv)
		}
		data = v
	case string:
		v = fmt.Sprintf("%+q", v)
                if len(v) > 0 {
		    // Remove unnecessary double-quote
		    data = v[1 : len(v)-1]
                }
	default:
	}
	return data
}

//
func main() {
        jsonStr := []byte(`{"test":"こんにちは"}`)
	var data interface{}
	json.Unmarshal(jsonStr, &data)
	convertedData := convertJsonElement(data)
}