2017-02-04 4 views
1

IWie dekodiere ich den folgenden JSON?

{ 
    "results": [ 
    { 
     "hits": [ 
     { 
      "title": "Juliette DELAUNAY", 
      "author:url": "abc.com" 
     } 
     ] 
    } 
    ] 
} 

Um in meinem gehen Programm zu entschlüsseln, ich habe folgende structs gemacht

type results struct{ 
    Result []result `json:"results"` 
} 

type result struct{ 
    Hits []hit `json:"hits"` 
} 

type hit struct{ 
    Name string `json:"title"` 
    Url string `json:"author:url"` 
} 
var m =make(map[string]string) 
var t results 

Aber wenn ich versuche folgende zu tun,

decoder := json.NewDecoder(resp.Body) 


    err = decoder.Decode(&t) 
    if err != nil { 
     fmt.Println(err) 
    } 


    for _,x := range t.Result[0].Hits{ 
     m[x.Name] = x.Url 
     fmt.Println(x.Name,x.Url) 
    } 
ein JSON-Objekt des Formats habe

Es gibt einen Laufzeitfehler, der besagt, dass der Index außerhalb des zulässigen Bereichs liegt. Was mache ich falsch? Sind meine Strukturen für den gegebenen json falsch?

EDIT: Die JSON-Datei I

var jsonStr = []byte(`{"requests":[{"indexName":"recherchepepitesAtoZ","params":"query=x&hitsPerPage=2817&maxValuesPerFacet=42&page=0&facets=%5B%22field_frenchtech_hub_pepite%22%2C%22field_categorie%22%2C%22field_frenchtech_hub_pepite%22%5D&tagFilters="}]}`) 
    req, err := http.NewRequest("POST", "http://6y0slgl8yj-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%20(lite)%203.20.4%3Binstantsearch.js%201.10.4%3BJS%20Helper%202.18.0&x-algolia-application-id=6Y0SLGL8YJ&x-algolia-api-key=6832a361e1e1628f8ddb2483623104c6", bytes.NewBuffer(jsonStr)) 
    //req.Header.Set("X-Custom-Header", "application/x-www-form-urlencoded") 
    req.Header.Set("Content-Type", "application/json") 

    client := &http.Client{} 
    resp, err := client.Do(req) 
    if err != nil { 
     panic(err) 
    } 
    defer resp.Body.Close() 
+0

bitte mich wissen lassen, wenn du einen dummen Fehler siehst. Ich bin seit Stunden dabei und ich bin jetzt wirklich frustriert und ich kann nicht sehen, wo ich falsch liege. – Krash

+0

Bereitgestellte Schnipsel funktioniert normal auf meinem Computer ohne Fehler – Uvelichitel

+0

Ich habe die JSON-Datei hinzugefügt, die ich versuche zu dekodieren. Funktioniert es dafür? – Krash

Antwort

0

Hier ist eine leicht modifizierte Version, die auf meiner Maschine arbeitet entschlüsseln müssen und gehen Spielplatz:

GoPlayground

package main 

import (
    "encoding/json" 
    "fmt" 
    "strings" 
) 

type results struct { 
    Result []result `json:"results"` 
} 

type result struct { 
    Hits []hit `json:"hits"` 
} 

type hit struct { 
    Name string `json:"title"` 
    Url string `json:"author:url"` 
} 

var m = make(map[string]string) 

func main() { 
    jsonSample := `{ 
    "results": [ 
    { 
     "hits": [ 
     { 
      "title": "Juliette DELAUNAY", 
      "author:url": "abc.com" 
     } 
     ] 
    } 
    ] 
    }` 

    var t results 
    decoder := json.NewDecoder(strings.NewReader(jsonSample)) 

    err := decoder.Decode(&t) 
    if err != nil { 
    fmt.Println(err) 
    } 

    for _, x := range t.Result[0].Hits { 
    m[x.Name] = x.Url 
    fmt.Println(x.Name, x.Url) 
    } 
} 
Verwandte Themen