2014-04-25 10 views
9

Próbuję odszyfrować tablicę JSON i umieścić ją w kawałku struktury. Czytałem, jak to zrobić, ale tylko jeśli tablica JSON zawiera klucze. Moja tablica JSON nie zawiera kluczy.Jak mogę iterować w tablicy JSON w Golang?

Usunąłem program do tylko części, w której obsługuje dane JSON. Kompiluje i można je znaleźć poniżej.

package main 

// 2014-04-19 

import (
    "fmt" 
    "encoding/json" 
) 

type itemdata struct { 
    data1 int // I have tried making these strings 
    data2 int 
    data3 int 
} 

func main() { 
    datas := []itemdata{} 

    json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas) 
    // I have tried the JSON string without the qoutes around the numbers 
    fmt.Println(len(datas)) // This prints '2' 
    fmt.Println("This prints") // This does print 
    for i := range datas { 
     fmt.Println(datas[i].data1) // This prints '0', two times 
    } 
    fmt.Println("And so does this") // This does print 
} 

Rozglądałem się za takie rzeczy jak „Go Lang JSON dekodowania bez kluczy” i czytać artykuły (i „stron pakietów”) na stronie Go Lang. Mogę znaleźć wystarczającą ilość informacji o tym, jak pracować z Go i JSON, ale żaden z moich znalezionych artykułów nie wyjaśnia, jak to zrobić bez kluczy w tablicy JSON.

Nie byłoby dziwne, gdybym dostał błąd; Wartości JSON są liczbami ciągowymi (w ten sposób uzyskuję je jako dane wejściowe), ale próbuję umieścić je w liczbach całkowitych. Nie dostaję jednak błędu. Próbowałem tworzyć wartości w łańcuchach struct "itemdata", które nie pomogły. Usunięcie cudzysłowów z wartości JSON również nie pomogło.

Chciałbym wiedzieć, w jaki sposób mogę uczynić mojej tablicy JSON w kawałek "itemdata". Pierwsza z trzech wartości przechodzi do "itemdata.data1", druga w "itemdata.data2", a trzecia w "itemdata.data3".

Proszę dać mi znać, jeśli uważasz, że mogę poprawić moje pytanie.

Dzięki z góry,
Remi

Odpowiedz

4

Co masz tutaj jest dwuwymiarową tablicą ciągów. można dekodować go tak:

type itemdata [][]string 

func main() { 
    var datas itemdata 

    json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas) 
    fmt.Println(len(datas)) 
    fmt.Println("This prints") 
    for i := range datas { 
     fmt.Println(datas[i][1]) 
    } 
    fmt.Println("And so does this") 
} 

Demonstration

+0

Dziękuję za pomoc, że był szybki! Mogę po prostu umieścić je w kawałku struktury, przeplatając je, czy nie mogę? – Remi

+0

Możesz dokonać takiej konwersji: http://play.golang.org/p/d-VrY58ovQ Czy tego chcesz? –

+0

To jest egzakta, której szukałem! Dziękuję Ci. Przepraszam, że nie ustawiłem odpowiedzi jako "natychmiast", musiałem odczekać kilka minut. – Remi

Powiązane problemy