与之类似,序列化JSON。
我当前的代码不起作用,我认为它必须与_Map,_String等未公开这一事实有关。
// vim:ft=go:ts=2
package main
import "json"
import "fmt"
import vector "container/vector"
func main() {
groceries := vector.New(0);
groceries.Push(&json._String{s:"Eggs"});
groceries.Push(&json._String{s:"Bread"});
groceries.Push(&json._String{s:"Milk"});
var tree json.Json = &json._Map{m:map[string]json.Json{
"hello": &json._String{s:"world"},
"groceries": &json._Array{a:groceries}
}};
fmt.Printf(json.JsonToString(tree));
}
最佳答案
看一下$ GOROOT/src/pkg/json/generic_test.go中的TestJsonMap函数,它看起来和您想要的类似。相关代码是
var jsontests = []string{
`null`,
`true`,
`false`,
`"abc"` // , etc.
}
values := make(map[string]Json);
mapstr := "{";
for i := 0; i < len(jsontests); i++ {
val, ok, errtok := StringToJson(jsontests[i]);
if !ok {
t.Errorf("StringToJson(%#q) => error near %v", jsontests[i], errtok)
}
if i > 0 {
mapstr += ","
}
values[jsontests[i]] = val;
mapstr += Quote(jsontests[i]);
mapstr += ":";
mapstr += JsonToString(val);
}
mapstr += "}";
mapv, ok, errtok := StringToJson(mapstr);
您想将值“world”插入名称“hello”,并将[“蛋”,“面包”,“牛奶”]推至“杂货店”。尝试
var values = make(map[string]string);
values["hello"] = `"world"`;
values["groceries"] = `["Eggs","Bread","Milk"]`;
mapstr := "{";
needcomma := false;
for key,val := range values {
jsonval, ok, errtok := json.StringToJson(val);
// Check errors
// Add a comma
if needcomma == true {
mapstr += ",";
} else {
needcomma = true;
}
mapstr += json.Quote(key);
mapstr += ":";
mapstr += json.JsonToString(jsonval);
}
mapstr += "}";
mapv, ok, errtok := json.StringToJson(mapstr);
关于json - 如何从Go动态创建JSON结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1737171/