web-dev-qa-db-ja.com

GolangはJSON配列をデータ構造に解析します

JSONデータを含むファイルを解析しようとしています。

[
  {"a" : "1"},
  {"b" : "2"},
  {"c" : "3"}
]

これは動的キーを持つJSON配列であるため、使用できると思いました。

type data map[string]string

ただし、mapを使用してファイルを解析することはできません。

c, _ := ioutil.ReadFile("c")
dec := json.NewDecoder(bytes.NewReader(c))
var d data
dec.Decode(&d)


json: cannot unmarshal array into Go value of type main.data

JSONデータを含むファイルを解析する最も簡単な方法は、配列(文字列から文字列型のみ)をGo構造体に入れることですか?

編集:受け入れられた答えをさらに詳しく説明する-私のJSONがマップの配列であることは事実です。コードを機能させるには、ファイルに次のものが含まれている必要があります。

{
  "a":"1",
  "b":"2",
  "c":"3"
}

その後、map[string]stringに読み込むことができます

28
Kiril

Jsonは実際にはマップの配列であるが、mapにアンマーシャルしようとしているためです。以下を使用してみてください。

type YourJson struct {
    YourSample []struct {
        data map[string]string
    } 
}
14
Steve P.

これを試してください: http://play.golang.org/p/8nkpAbRzAD

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
)

type mytype []map[string]string

func main() {
    var data mytype
    file, err := ioutil.ReadFile("test.json")
    if err != nil {
        log.Fatal(err)
    }
    err = json.Unmarshal(file, &data)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(data)
}
21
Marko Kevac

bitlyのsimplejsonパッケージを試すことができます
https://github.com/bitly/go-simplejson

ずっと簡単です。

4
JessonChan