{"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 –