我有一个 json 数组,其中包含一些标志作为键,我已将这些键的默认值设置为 false。这是我的 json 数组。
var flags = map[string]bool{
"terminationFlag": false,
"transferFlag": false,
"jrCancelledFlag": false,
"jrFilledFlag": false,
}
在 for 循环中执行操作时,我必须将上述 json 数组中的 1 个字段更新为 true。在下一次迭代期间,它必须将 json 数组中的第二个字段更新为 true。 json数组中的所有字段都设置为true后,我要返回json数组。
我试过的代码:
Keystrings := []string{"terminationReport - 2019-1","transferReport - 2019-1","jrCancelledReport - 2019-1","jrFilledReport - 2019-1"}
fmt.Println("Keystrings ", Keystrings)
for i,value := range Keystrings {
bytesread, err = stub.GetState(value)
var result []string
_ = json.Unmarshal(bytesread, &result)
fmt.Println("result ", result)
if result[0] == "yes"{
fmt.Println("result in if ", result)
flags[i] = true
}
}
最佳答案
由于很难从问题中理解所问的内容,下面是一个使用与问题类似的数据的简单尝试,希望您可以从该示例中提取正确的部分并根据您的问题进行调整。按照代码中的注释了解发生了什么。
package main
import (
"encoding/json"
"fmt"
"log"
)
var jsonBlob = []byte(`["jrCancelledFlag", "yes"]`)
var flags = map[string]bool{
"terminationFlag": false,
"transferFlag": false,
"jrCancelledFlag": false,
"jrFilledFlag": false,
}
func main() {
// Parse jsonBlob into a slice of strings
var parsed []string
if err := json.Unmarshal(jsonBlob, &parsed); err != nil {
log.Fatalf("JSON unmarshal: %s", err)
}
// Expect the slice to be of length 2, first item flag name, second item
// yes/no.
if len(parsed) != 2 {
log.Fatalf("parsed len %d, expected 2", len(parsed))
}
// Assume parsed[0] actually appears in flags... otherwise more error checking
// is needed.
if parsed[1] == "yes" {
flags[parsed[0]] = true
}
// Emit updated flags as json
json, err := json.Marshal(flags)
if err != nil {
log.Fatalf("JSON marshal: %s", err)
}
fmt.Println(string(json))
}
关于json - 如何在 golang 中替换/更新 json 数组中的键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54290985/