2016-03-31 5 views
1

入ってくる文字列は次のとおりです。golang、simplejsonでjson配列の項目を解読するには?

 {"status_list":[ 
     {"m_id":70,"m_status":"OK","m_status_code":200,"reported":false}, 
     {"m_id":71,"m_status":"Send Message Over Time","m_status_code":800,"reported":false}, 
     {"m_id":72,"m_status":"OK","m_status_code":200,"reported":false}, 
     {"m_id":73,"m_status":"OK","m_status_code":200,"reported":false} 
     ] 
     } 

最後のステータスm_statusを取得する方法は?

私が使っている方法は、私が得た

import github.com/bitly/go-simplejson" 

.... 
jsonRequest, _ := simplejson.NewJson([]byte(incommingString)) 
mArray := jsonRequest.Get("status_list").BustArray() 
mItem := mArray[3] 
fmt.printf("mItem: %") 
m3StatusCode := mItem["m_status_code"] //<---<< Can't compile 

です:

invalid operation: mItem["m_status_code"] (type interface {} does not support indexing) 

私は最後の行のコードを削除した場合。 どうすればm_status_code値を取得することができます:私は

mItem: : map[m_id:73 m_status:OK m_status_code:200 reported:%!s(bool=false)] 

QUESTIONとしてmItemをプリントアウトすることができますか?

+0

行 'mArray:= jsonRequest.Get(" status_list ").BustArray()'は '.MustArray()'でなければなりません。 – perelin

答えて

2

まず、type assertionを実行する必要があります。

m, ok := mItem.(map[string]interface{}) 
if(!ok){ 
    fmt.Println("Invalide data") 
} 

fmt.Println(m["m_status_code"]) 

これは、mItemが実際にマップではないためです。そのinterface{}です。 simplejsonのMustArray[]interface{}を返します。

mItemに格納されている値は、インデックスm_status_codeを使用できるタイプであると主張する必要があります。

+0

ありがとう!しかし、私がそれを印刷すると、%d(json.Number = 200)をintにデコードする方法が得られましたか? –

+0

私はそれを得た!それは文字列です。まだintではありません。 fmt.Printf()で%sを使用すると問題ありません。私は200を得ました。 –

+0

うれしいことです。私はもっ​​と簡単な方法があるかどうかを探しています。私が何かを見つけたら、私は答えを編集します。 –

関連する問題