1 回答
TA贡献1825条经验 获得超4个赞
您没有得到所需的输出,因为您的 json 结构的定义不正确。你有;
type reportTypeJson struct{
Version string `json:"version"`;
TermsOfService string `json:"termsofService"`;
Features string `json:"features feature" `;
Zip string `json:"current_observation > display_location > zip"`;
}
它将特征表示为字符串,但它实际上是一个对象,要么是一个对象,要么是map[string]string它自己的结构体,可以这样定义;
type Features struct {
Feature string `json:"feature"`
}
鉴于字段名称是复数,我猜它是一个集合,因此将您的结构更改为
type reportTypeJson struct{
Version string `json:"version"`;
TermsOfService string `json:"termsofService"`;
Features map[string]string `json:"features"`;
Zip string `json:"current_observation > display_location > zip"`;
}
可能是您正在寻找的。当然,这意味着您必须修改一些其他代码,这些代码将 xml 结构中的值分配给 json 或其他代码,但我认为您可以自己解决这个问题:D
编辑:下面的部分是您将 xml 类型转换为 json 类型的地方(即分配 reportTypeJson 的实例并将 reportType 的值分配给它,以便您可以调用其上的 json marshal 以产生输出)。假设你正在使用的定义reportTypeJson从上面它有Features一个map[string]string,你只需要修改你设置一条线output.Features。在下面的示例中,我使用“复合文字”语法内联地执行此操作。这允许您实例化/分配集合,同时为其分配值。
//Now marshal the data out in JSON
var data []byte
var output reportTypeJson
output.Version = string(report.Version);
output.TermsOfService = string(report.TermsOfService)
output.Features= map[string]string{"features":string(report.Features)} // allocate a map, add the 'features' value to it and assign it to output.Features
output.Zip=string(report.Zip)
data,err = json.MarshalIndent(output,""," ")
doErr(err, "From marshalIndent")
fmt.Printf("JSON output nicely formatted: \n%s\n",data)
- 1 回答
- 0 关注
- 282 浏览
添加回答
举报