2017-10-29 16 views
0

私はインターフェイス{}を返す関数を持っています。構造体のフィールドを「ハードコーディング」せずに、これをJSON配列にシリアル化するにはどうすればよいですか。 私はhttps://github.com/jmoiron/jsonqを使用してインターフェイスを返します。JSON配列マーシャリング

json.Unmarshal(resp.Bytes(), &response) 
data := map[string]interface{}{} 
dec := json.NewDecoder(strings.NewReader(resp.String())) 
dec.Decode(&data) 
jq := jsonq.NewQuery(data) 

results, err := jq.Array("results") 

if err != nil { 
    log.Fatalln("Unable to get results: ", err) 
} 
if len(results) == 0 { 
    return nil 
} 
return results // this is returning an interface{} 
+0

を:私は、使用してそれを反復することができました[]インターフェース{}

返さ
fmt.Println(reflect.TypeOf(results)) 

:私はで見つけました:JSONストリームをデコードして、データ構造をJSONストリームにシリアル化する(つまり、エンコードする)方法を尋ねます。あなたは詳細を教えていただけますか? – kostix

+0

入手したデータがわからない場合は、データで何をしたいですか?最終的には、サークルに入っているのは、ある点では、使用するためにどのようなデータが必要かを知る必要があるからです。そうでない場合(ちょうどそのようなデータをある種のdb、fileなどに書きたいのと同じように)、最初に非整列化する必要はありません。 – TehSphinX

+0

@kostix私は制御しない外部APIからフェッチしています。私に与えられたすべてのデータを保存するのではなく、JSON応答のサブセクションのみを保存したいと思います。私はこれをMongoDBやどこかに保存するつもりですが、今は読める形式で印刷しようとしていました。本当に新しいですので、この質問がばかげている場合はお詫び申し上げます。 –

答えて

0

私が扱っていたタイプをチェックしたはずです。私は質問を得ることはありません

for _, event:= range results { 
     v, err := json.MarshalIndent(event, "", " ") 
     if err != nil { 
      fmt.Println("error:", err) 
     } 
     fmt.Println(string(v)) 
    } 
2

json文字列は、常にmap[string]interface{}にアンマーシャリングすることができます。それはあなたがその時に働く必要があるものです。