私はgolangに新しく、次のjson文字列からデータを取得する必要があります。今、私は同様のgolang配列リストを持つjsonをglolangの構造体に変換する
type IntervalData struct {
Data json.RawMessage `json:"data"`
Did string `json:"did"`
Sid string `json:"sid"`
}
type IntervalDataList []string
と
r := IntervalData{}
json.Unmarshal([]byte(json), &r)
log.Printf("Raw Body: %s", r)
log.Printf("Raw Date Json: %s", r.Data)
blist := IntervalDataList{}
json.Unmarshal([]byte(r.Data), &blist)
log.Printf("Date List : %s", blist)
のようなJSONアンマーシャリングコードでSIDを取得することができるだけこのコードを構造体をしようとしたJSON文字列から示されていないデータをしたために
{"data" : ["2016-06-21","2016-06-22","2016-06-25"], "sid" : "ab", "did" : "123"}
空の地図として。
上記のjsonからデータを取得する方法は何でしょうか。
UPDATE:問題が解決しました。私の入力jsonは{"data":"[\"dsadsdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n\"sdsdadsddad\"]","did":"654646456","sid":"88683627434"}
という形式で提供されていますが、これは必須ではありません。次に、クライアントのスクリプトをチェックし、オンラインソースに基づいて変更を加えました。 How to JSONize a uint8 slice in Go?
type RequestData struct {
Data JSONableSlice `json:"data"`
Did string `json:"did"`
Sid string `json:"sid"`
}
type JSONableSlice []uint8
func (u JSONableSlice) MarshalJSON() ([]byte, error) {
var result string
if u == nil {
result = "null"
} else {
result = strings.Join(strings.Fields(fmt.Sprintf("%d", u)), ",")
}
return []byte(result), nil
}
func ApiRequest(w http.ResponseWriter, r *http.Request) {
sid := r.Header.Get("sid")
deviceID := r.Header.Get("deviceId")
body, err := ioutil.ReadAll(r.Body)
failOnError(err, "Issue faced during reading post contents")
data := RequestData{
Data: body,
Sid: sid,
Did: dID,
}
bdata, err := json.Marshal(data)
// Some Rabbit MQ Connection code
// Rabbit MQ publish code
err = ch.Publish(
"", // exchange
q.Name, // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
DeliveryMode: amqp.Persistent,
ContentType: "text/plain",
Body: bdata,
})
}
あまり変更はアンエクスポートフィールドであるr.data
を参照しているあなたのコード例では、今、消費者のコードで
type IntervalData struct {
//Data json.RawMessage `json:"data"`
Data []byte `json:"data"`
Did string `json:"did"`
Sid string `json:"sid"`
}
r := IntervalData{}
json.Unmarshal([]byte(json), &r)
log.Printf("Raw Body: %s", r)
log.Printf("Raw Date Json: %s", r.Data)
blist := IntervalDataList{}
json.Unmarshal(r.Data, &blist)
log.Printf("Date List : %s", blist)
https://github.com/antonholmquist/jason – pregmatch
は、たぶん私はポイントを逃したが、何が '[] STRING'として' IntervalData.Data'宣言した反対を話しますか? https://play.golang.org/p/ken-wOlYBf – Havelock