Saya mencoba membaca data JSON dari web, tetapi kode itu mengembalikan hasil yang kosong. Saya tidak yakin apa yang saya lakukan salah di sini.
package main
import "os"
import "fmt"
import "net/http"
import "io/ioutil"
import "encoding/json"
type Tracks struct {
Toptracks []Toptracks_info
}
type Toptracks_info struct {
Track []Track_info
Attr []Attr_info
}
type Track_info struct {
Name string
Duration string
Listeners string
Mbid string
Url string
Streamable []Streamable_info
Artist []Artist_info
Attr []Track_attr_info
}
type Attr_info struct {
Country string
Page string
PerPage string
TotalPages string
Total string
}
type Streamable_info struct {
Text string
Fulltrack string
}
type Artist_info struct {
Name string
Mbid string
Url string
}
type Track_attr_info struct {
Rank string
}
func get_content() {
// json data
url := "http://ws.audioscrobbler.com/2.0/?method=geo.gettoptracks&api_key=c1572082105bd40d247836b5c1819623&format=json&country=Netherlands"
res, err := http.Get(url)
if err != nil {
panic(err.Error())
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err.Error())
}
var data Tracks
json.Unmarshal(body, &data)
fmt.Printf("Results: %v\n", data)
os.Exit(0)
}
func main() {
get_content()
}
type WebKeys struct { Keys []struct { X5t string X5c []string } }
bahkan ketika params sebenarnya di JSON yang Anda parsing berada dalam huruf kecil. Contoh JSON:{ "keys": [{ "x5t": "foo", "x5c": "baaaar" }] }
&http.Client{Timeout: 10 * time.Second}
atau menggunakan seluruh perpustakaan / strategi lain?json.NewDecoder(r.Body).Decode(target)
akan mengembalikan kesalahan untuk jenis JSON cacat tertentu! Saya hanya membuang-buang waktu beberapa jam untuk mencoba memahami mengapa saya terus mendapatkan jawaban kosong - ternyata sumber JSON memiliki koma tambahan di mana seharusnya tidak. Saya sarankan Anda menggunakan sebagai gantinya. Ada juga artikel yang bagus tentang bahaya potensial lain dari penggunaan di sinijson.Unmarshal
json.Decoder
Masalah Anda adalah deklarasi irisan dalam data Anda
structs
(kecualiTrack
, itu tidak boleh berupa irisan ...). Ini diperparah oleh beberapa nama field yang agak konyol di file json yang diambil, yang dapat diperbaiki melalui structtags, lihat godoc .Kode di bawah berhasil mem-parsing json. Jika Anda memiliki pertanyaan lebih lanjut, beri tahu saya.
sumber
Anda perlu nama properti huruf besar dalam struct Anda agar dapat digunakan oleh paket json.
Nama properti huruf besar adalah
exported properties
. Nama properti huruf kecil tidak diekspor.Anda juga harus melewati objek data Anda dengan referensi (
&data
).sumber
Hasil dari
json.Unmarshal
(kevar data interface{}
) tidak secara langsung cocok dengan jenis Go Anda dan deklarasi variabel. Sebagai contoh,Keluaran:
sumber