web-dev-qa-db-ja.com

GolangでJSON配列を解析する

簡単な質問:jsonパッケージを使用してGoで文字列(配列)を解析する方法は?

type JsonType struct{
    Array []string
}

func main(){
    dataJson = `["1","2","3"]`
    arr := JsonType{}
    unmarshaled := json.Unmarshal([]byte(dataJson), &arr.Array)
    log.Printf("Unmarshaled: %v", unmarshaled)
}
15
kingSlayer

Unmarshalの-​​ 戻り値 はエラーであり、これが出力されます。

// Return value type of Unmarshal is error.
err := json.Unmarshal([]byte(dataJson), &arr)

JsonTypeも削除し、スライスを使用するだけです:

package main

import (
    "encoding/json"
    "log"
)

func main() {
    dataJson := `["1","2","3"]`
    var arr []string
    _ = json.Unmarshal([]byte(dataJson), &arr)
    log.Printf("Unmarshaled: %v", arr)
}

// prints out:
// 2009/11/10 23:00:00 Unmarshaled: [1 2 3]

プレイのコード: https://play.golang.org/p/GNWlylavam

22
miku

注:この回答は、質問が編集される前に書かれました。 元の質問 _&arr_でjson.Unmarshal()に渡されました:

_unmarshaled := json.Unmarshal([]byte(dataJson), &arr)
_

arrのアドレスを json.Unmarshal() に渡してJSON配列を非整列化しますが、arrは配列(またはスライス)ではありません。構造体の値。

配列は、Go配列またはスライスに非整列化できます。したがって、_arr.Array_を渡します。

_dataJson := `["1","2","3"]`
arr := JsonType{}
err := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v, error: %v", arr.Array, err)
_

出力( Go Playground で試してください):

_2009/11/10 23:00:00 Unmarshaled: [1 2 3], error: <nil>
_

もちろん、JsonTypeラッパーさえ必要ではなく、単純な_[]string_スライスを使用するだけです:

_dataJson := `["1","2","3"]`
var s []string
err := json.Unmarshal([]byte(dataJson), &s)
_
7
icza