JSONを含むstring
の非整列化を行いたいが、Unmarshal
関数の入力には[]byte
が使用されます。utf8文字列を[]バイトに変換するには?
UTF8 string
を[]byte
に変換するにはどうすればよいですか?
JSONを含むstring
の非整列化を行いたいが、Unmarshal
関数の入力には[]byte
が使用されます。utf8文字列を[]バイトに変換するには?
UTF8 string
を[]byte
に変換するにはどうすればよいですか?
この質問はHow to assign string to bytes arrayの可能複製であるが、より良い、代替ソリューションがあるとして、まだそれに答える:string
から[]byte
への変換
は、単純なconversionを使用して、仕様によって許可されている:
へと文字列型から
変換[...]
- 文字列型の値をバイト型のスライスに変換すると、連続する要素が文字列のバイトであるスライスが生成されます。
だから、単に行うことができます。
s := "some text"
b := []byte(s) // b is of type []byte
はしかし、string => []byte
変換は([]byte
値がない間string
sが不変であるとして、それは、しなければならない)、文字列のコンテンツのコピーを作成し、 のサイズが大きい場合は効率的ではありません。代わりに、io.Reader
をstrings.NewReader()
を使用して作成することができます。はコピーされずに読み込まれます。
s := `{"somekey":"somevalue"}`
var result interface{}
err := json.NewDecoder(strings.NewReader(s)).Decode(&result)
fmt.Println(result, err)
出力(Go Playground上でそれを試してみてください):
map[somekey:somevalue] <nil>
注:strings.NewReader()
とjson.NewDecoder()
を呼び出すと、いくつかのオーバーヘッドを持っているので、そして、あなたはDecoder.Decode()
メソッドを使用してjson.NewDecoder()
とアンマーシャリングにこのio.Reader
を渡すことができます小さなJSONテキストを使用している場合は、安全に[]byte
に変換してjson.Unmarshal()
を使用すれば、遅くなることはありません。
s := `{"somekey":"somevalue"}`
var result interface{}
err := json.Unmarshal([]byte(s), &result)
fmt.Println(result, err)
出力は同じです。 Go Playgroundで試してみてください。
注:あなたは、いくつかのio.Reader
(例えば、ファイルまたはネットワーク接続)を読んで、JSON入力string
を取得している場合は、あなたが直接、最初にそれからコンテンツを読まなく、json.NewDecoder()
にそのio.Reader
を渡すことができます。
文字列に[]バイトを使用してください。例えば:
package main
import (
"encoding/json"
"fmt"
)
func main() {
s := `{"test":"ok"}`
var data map[string]interface{}
if err := json.Unmarshal([]byte(s), &data); err != nil {
panic(err)
}
fmt.Printf("json data: %v", data)
}
遊び場で確認してくださいhere。
http://stackoverflow.com/a/40384408/1975086 あなたは '[] byte(s)'を実行します –
既にここで答えられています - http:// stackoverflow。com/questions/8032170/how-to-assign-string-to-bytes-array –