2

非常に簡単なテストがあります: http://play.golang.org/p/wY4sN9AUky。JSON から解析された構成、最初の文字列値は正常に解析されましたが、2 番目は空の文字列に解析されましたが、そうではありません。

type Config struct {
    Address      string "address"
    Debug        bool   "debug"
    DbUrl        string "dburl"
    GoogleApiKey string "google_api_key"
}

func (cfg *Config) read(json_code string) {
    if e := json.Unmarshal([]byte(json_code), cfg); e != nil {
        log.Printf("ERROR JSON decode: %v", e)
    }
}

func main() {
    var config Config
    config.read(`{
  "address": "10.0.0.2:8080",
  "debug": true,
  "dburl": "localhost",
  "google_api_key": "the-key"
}`)
    log.Printf("api key %s", config.GoogleApiKey)  // <- empty string. why?
    log.Printf("address %v", config.Address)
}
4

1 に答える 1

4

構造体で JSON 名を間違って指定しています。

GoogleApiKey string "google_api_key"

する必要があります

GoogleApiKey string `json:"google_api_key"`

JSON パッケージはjson、テキスト内のヘッダーを探します。バッククォートは生の文字列を区切るため、google_api_key を引用符で囲むことができます。

http://play.golang.org/p/KNxYhzGLAp

package main

import (
  "log"
  "encoding/json"
)

type Config struct {
  Address string `json:"address"`
  Debug bool `json:"debug"`
  DbUrl string `json:"dburl"`
  GoogleApiKey string `json:"google_api_key"`
}

func (cfg *Config) read(json_code string) {
  if e := json.Unmarshal([]byte(json_code), cfg); e != nil {
    log.Printf("ERROR JSON decode: %v", e)
  }
}

func main() {
  var config Config
  config.read(`{
  "address": "10.0.0.2:8080",
  "debug": true,
  "dburl": "localhost",
  "google_api_key": "the-key"
}`)
  log.Printf("api key %s", config.GoogleApiKey)
  log.Printf("address %v", config.Address)
}
于 2013-02-18T05:11:08.267 に答える