{"id":
{"123456789":
{"Account":"asdf",
"Password":"qwerty"
"LastSeen":"1397621470",
}
}
}
的程序,我一直在努力使需求得到ID爲一個字符串,然後再使用它來檢查LastSeen的時間。 我試過使用simplejson和jsonq,但仍無法弄清楚如何做到這一點。
{"id":
{"123456789":
{"Account":"asdf",
"Password":"qwerty"
"LastSeen":"1397621470",
}
}
}
的程序,我一直在努力使需求得到ID爲一個字符串,然後再使用它來檢查LastSeen的時間。 我試過使用simplejson和jsonq,但仍無法弄清楚如何做到這一點。
您可以使用RawMessage
,並使其更simpiler(play with it
):
package main
import (
"encoding/json"
"fmt"
)
var data []byte = []byte(`{"id": {"123456789": {"Account":"asdf", "Password":"qwerty", "LastSeen":"1397621470"}}}`)
type Message struct {
Id string
Info struct {
Account string
Password string
LastSeen string
}
}
func main() {
var (
tmpmsg struct {
Data map[string]json.RawMessage `json:"id"`
}
msg Message
)
if err := json.Unmarshal(data, &tmpmsg); err != nil {
panic(err) //you probably wanna use or something instead
}
for id, raw := range tmpmsg.Data {
msg.Id = id
if err := json.Unmarshal(raw, &msg.Info); err != nil {
panic(err)
}
}
fmt.Printf("%+v\n", msg)
}
查看JSON上的Golang博客文章here可以使用encoding/json軟件包來完成。我創建了一個小程序,做法如下:
package main
import (
"encoding/json"
"fmt"
)
var data []byte = []byte(`{"id": {"123456789": {"Account":"asdf", "Password":"qwerty", "LastSeen":"1397621470"}}}`)
type Message struct {
id string
LastSeen int64
}
var m Message
func main() {
var i interface {}
err := json.Unmarshal(data, &i)
if err != nil {
println("Error decoding data")
fmt.Printf("%s", err.Error())
return
}
m := i.(map[string]interface{})
for k, v := range m {
println(k)
im := v.(map[string]interface{})
for ik, iv := range im {
println("\t", ik)
jm := iv.(map[string]interface{})
for jk, jv := range jm {
println("\t\t", jk, ": ", jv.(string))
}
}
}
}
我道歉,如果這是窮人的圍棋最佳實踐,這樣的術語,我是新來的語言。而且我知道一些這樣的元素並不像消息類型定義那樣是完全必要的,但它至少在你的數據上起作用。
你也許在尋找這樣的事情? http://stackoverflow.com/questions/17452722/how-to-get-the-key-value-from-a-json-string-in-golang我創建了一個正確的答案:http:// play .golang.org/p/L9lUI3LP1I –