我正在尝试将JSON解组到结构中,但是事实证明这很困难,因为外部JSON密钥发生了变化,而我才在一周前才开始使用。这是我的手动尝试:
import (
"encoding/json"
"fmt"
"strconv"
)
type Device struct {
localUUID string
applicationUUID string
externalUUID string
commit string
lastSeen string
state string
progress float32
}
func main() {
devices := make([]*Device, 0, 10)
b := []byte(`{
"5417871461137421886": {
"applicationUUID": "test_applicationUUID",
"commit": "test_commit",
"lastSeen": "test_lastSeen",
"localUUID": "E4:F5:13:8E:F5:43",
"progress": "3.5",
"externalUUID": "test_externalUUID",
"state": "test_state"
},
"5632882567440442530": {
"applicationUUID": "test_applicationUUID",
"commit": "test_commit",
"lastSeen": "test_lastSeen",
"localUUID": "E4:F5:13:8E:F5:42",
"progress": "3.5",
"externalUUID": "test_externalUUID",
"state": "test_state"
},
"8912255216147730520": {
"applicationUUID": "test_applicationUUID",
"commit": "test_commit",
"lastSeen": "test_lastSeen",
"localUUID": "E4:F5:13:8E:F5:41",
"progress": "3.5",
"externalUUID": "test_externalUUID",
"state": "test_state"
}
}`)
var f interface{}
json.Unmarshal(b, &f)
outer := f.(map[string]interface{})
for _, value := range outer {
inner := value.(map[string]interface{})
device := &Device{}
device.localUUID = inner["localUUID"].(string)
device.applicationUUID = inner["applicationUUID"].(string)
device.externalUUID = inner["externalUUID"].(string)
device.commit = inner["commit"].(string)
device.lastSeen = inner["lastSeen"].(string)
device.state = inner["state"].(string)
f, _ := strconv.ParseFloat(inner["progress"].(string), 32)
device.progress = float32(f)
devices = append(devices, device)
}
for _, device := range devices {
fmt.Println(device)
}
}
有没有一种方法可以忽略键并遍历值,从而允许我使用json.Unmarshal(b,&Device)?
您有一系列JSON对象, 将 一个唯一的ID 映射 到每个Device
。将其解组为map
type Device struct {
LocalUUID string `json:"localUUID"`
ApplicationUUID string `json:"applicationUUID"`
ExternalUUID string `json:"externalUUID"`
Commit string `json:"commit"`
LastSeen string `json:"lastSeen"`
State string `json:"state"`
Progress float32 `json:"progress,string"`
}
func main() {
devices := make(map[string]*Device)
err := json.Unmarshal(b, &devices)
if err != nil {
log.Fatal(err)
}
for _, device := range devices {
fmt.Printf("%#v\n", device)
}
}
https://play.golang.org/p/JDZzG64jJR
问题内容: 应用 http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css和 http://code.jquery.com/mobile/1.3.2/jquery.mobile后-1.3.2.min.js 无法通过脚本更改按钮的文本 有没有类似的经验并有解决方案? 可以从 FIDDLE 尝试DEMO **** JQUERY: H
问题内容: 基本上我想要的是以下代码的工作版本: 错误: 原因: 根据MySQL Doc: 只要服务器运行,InnoDB就会使用内存中的自动增量计数器。如前所述,当服务器停止并重新启动时,InnoDB将为该表的第一个INSERT重新初始化每个表的计数器。 这意味着每当我重新启动服务器时,我的auto_increment值都将设置为最小。 我有一个叫的表,另一个叫的表。他们两个都有共享的列。表格中的
应用http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css和http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js后 无法通过脚本
这就是我生成dutylist的方法。 这将更改对的第二个值 但是它会更改pos中的其他值,也就是说,如果我更改了StaffListUpdated[0].third[0]=pair,它也会更改StaffListUpdated[1].third[0]=pair。我试过很多种方法,但都无济于事。
当我试图从struts的action类(即RMI客户端)访问RMI serevr时(点击jsp按钮),我得到了这个执行选项 下面是我的RMI客户端代码片段 当我使用public static void main()在单独的文件中尝试上面的代码时,这很好,但当我在struts框架的Action类中尝试相同的代码时,出现了上述异常。
问题内容: 这个问题已经在这里有了答案 : 获取字典中具有最大值的键? (25个答案) 4年前关闭。 我正在尝试获取dict键,其值是所有dict值的最大值。 我发现了两种方法,都不够优雅。 有没有更好的方法? 问题答案: 使用参数可以: 演示: 该参数接受一个函数,对于可迭代的每个条目,它将找到该函数为其返回最大值的那个条目。