2017-12-29 22 views
-1

私は同様の質問への回答に基づいてthis JSON HTTPレスポンスを解析しています
を行うにしようとしていますどのような。私のコードはJSONを何のエラーもなく解析することができますが、値を読み込んでそれを提供された変数に格納することはできません。 これは最後の2時間私を困惑させていました、そして、私がここで見落とされている些細な理由によるかもしれません。遊び場に[戻る]:構文解析JSON

CODE

type ImporterResponse struct { 
    results []packagemeta `json:"results"` 
} 

type packagemeta struct { 
    path  string `json:"path"` 
    synopsis string `json:"synopsis,omitempty"` 
    count int `json:"import_count,omitempty` 
} 


func main() { 

    res := []byte(`{"results":[{"path":"4d63.com/randstr/lib/randstr","import_count":0,"synopsis":"Package randstr generates random strings (e.g."},{"path":"bitbucket.org/pcas/tool/mathutil","import_count":0}]}`) 
    fmt.Println("Decoding the JSON") 

    r := bytes.NewReader(res) 
    decoder := json.NewDecoder(r) 

    packageimporters := &ImporterResponse{} 
    err := decoder.Decode(packageimporters) 

    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("Packageimporters: %+v", packageimporters) 
    fmt.Println(len(packageimporters.results)) 
} 

リンク:https://play.golang.org/p/NzLl7Ujo2IJ

私は欲しい:

  1. これを修正するには?
  2. JSONが正しく解析されないとエラーメッセージが表示されないのはなぜですか?

P.S:私は、この質問が以前に尋ねられており、利用可能な解決策がありますが、それらのどれも私のために働かないことを理解します。したがって、私はこの投稿をしました。

答えて

2

構造体フィールドをエクスポートする必要があります。そうでなければ、jsonパッケージは構造体フィールドにアクセスできません。 JSONパッケージだけのstructタイプ (大文字で始まるもの)のエクスポートされたフィールドをアクセスする

、詳細については、この段落をJSON and goをお読みください。したがって、構造体のエクスポートされたフィールドは、 のJSON出力にのみ存在します。

そして、より多くの詳細については、この1:

がどのように非整列化がされて復号さ データを格納するためのフィールドを識別しますか?

Anが「フー」のタグでフィールドをエクスポートし

( の詳細のために行くの仕様を参照してください。与えられたJSONのキー「フー」のために、非整列化は、(優先順に)検索し 先の構造体のフィールドを検索します構造体タグ)、

アンエクスポート "foo" という名前のフィールド、または

は、Anが "FOO" または "FOO" または "フー" の他のいくつかの大文字と小文字を区別しない試合という名前のフィールド を輸出しました。

だからあなたの構造体が本当にする必要があります:

type Packagemeta struct { 
    Path  string `json:"path"` 
    Synopsis string `json:"synopsis,omitempty"` 
    Count int `json:"import_count,omitempty` 
} 
+0

今以降からは、これは私のチェックリストの一番上になります。 –