2016-11-11 12 views
0

私はthis JSONパーサを使用して、APIからJSON応答からデータを抽出しています。それは私が次の出力を取得し、データとするとき、文字列にバイト配列に変換して印刷を含むバイト配列を返します。文字列をJSONに変換して配列にデータを保存するにはどうすればよいですか?

[{"Name": "Vikings", "Type": "show"}, 
    {"Name": "Spartacus: Gods Of The Arena", "Type": "show"}, 
    {"Name": "True Detective", "Type": "show"}, 
    {"Name": "The Borgias", "Type": "show"}, 
    {"Name": "Se7en", "Type": "movie"}] 

これは通常の文字列であるので、私はデータをmaniuplatingの方法がありません私が必要とするものを抽出する。

shows := ["Vikings", "Spartacus: Gods Of The Arena"...] 
    movies := ["Se7en", "other data", ...] 

私はこれらの配列にやりたいことはタイプに基づいて、ユーザのタイトル与える(すなわち::ショー、映画など)は、彼/彼女は尋ねた理想的には、私はこれらのような配列を持っているしたいのですが。だから本質的に私が探しているのは、文字列を私が簡単に操作できる(そしておそらくフィルタリングできる)ものに変換する方法です。

これは奇妙な方法であると思われますが、他のやり方は考えられません。私はGoの構文や、やり方がJavascriptのような他の言語と比べて非常に慣習的であると感じています。ここで私はこれを1行か2行で簡単に行うことができました。

答えて

2

データの形状に一致する値にデータをアンマーシャリングするために、標準的なencoding/jsonパッケージを使用して:番組や映画を見つけるアンマーシャル項目を

var items []struct { // Use slice for JSON array, struct for JSON object 
    Name string  
    Type string   
} 
if err := json.Unmarshal(d, &items); err != nil { 
    log.Fatal(err) 
} 

ループ:

var shows, movies []string 
for _, item := range items { 
    switch item.Type { 
    case "movie": 
     movies = append(movies, item.Name) 
    case "show": 
     shows = append(shows, item.Name) 
    } 
} 

playground example

+0

私はそれを試みましたが、問題はJSONがネストされていて、必要なデータが他のオブジェクトの内側にあることです。私が使ったもう一つのパーサはこの問題を解決しますが、文字列を使うように強制します。とにかく、私は文字列を反復し、そのインデックスを使って操作することで問題を解決しました。しかし、ありがとう! – ninesalt

関連する問題