我正在调用Google Translate API,并希望将响应表示为结构。 JSON响应是:
{
"data": {
"translations": [
{
"translatedText": "Mi nombre es John, nació en Nairobi y tengo 31 años de edad",
"detectedSourceLanguage": "en"
}
]
}
}
我试图想出一个结构:
type Translations struct{
TranslatedText string
SourceLanguage string
}
type Translation struct{
Data string
Value *[]Translations
}
或:
type Translations struct{
TranslatedText string
SourceLanguage string
}
type Translation struct{
Data string
Value Translations
}
这是正确的方法吗?
答案 0 :(得分:4)
这是一个将两个结构定义合并为一个的工作示例。
http://play.golang.org/p/nI0Qet6R78
package main
import (
"fmt"
"encoding/json"
)
type Translation struct{
Data struct {
Translations []struct {
TranslatedText string
DetectedSourceLanguage string
}
}
}
func main() {
source := []byte(`
{
"data": {
"translations": [
{
"translatedText": "Mi nombre es John, nació en Nairobi y tengo 31 años de edad",
"detectedSourceLanguage": "en"
}
]
}
}
`)
var j Translation
err := json.Unmarshal(source, &j)
if err != nil {
panic(err)
}
for _,t := range j.Data.Translations {
fmt.Printf("----\n")
fmt.Printf("translatedText: %s\n", t.TranslatedText)
fmt.Printf("detectedSourceLanguage: %s\n", t.DetectedSourceLanguage)
}
}
答案 1 :(得分:0)
您可以将数据分为三个部分。单个translation
包含在translations
数组中。您的主要结构是data
。
我发现最容易从最内层的结构开始并定义它然后以我的方式运行到外部结构。
这些的表示可以这样定义:
type translation struct {
TranslatedText string
SourceLanguage string `json:"detectedSourceLanguage"`
}
type translations struct {
Translations []translation
}
type data struct {
Data translations
}
如果数据结构不是太复杂,你可以将它们全部放在一起:
type data struct {
Data struct {
Translations []struct {
TranslatedText string
SourceLanguage string `json:"detectedSourceLanguage"`
}
}
}
完整的工作example:
package main
import (
"encoding/json"
"fmt"
)
var json_s string = `{
"data": {
"translations": [
{
"translatedText": "Mi nombre es John, nació en Nairobi y tengo 31 años de edad",
"detectedSourceLanguage": "en"
}
]
}
}`
type data struct {
Data struct {
Translations []struct {
TranslatedText string
SourceLanguage string `json:"detectedSourceLanguage"`
}
}
}
func main() {
var translation data
err := json.Unmarshal([]byte(json_s), &translation)
if err != nil {
panic(err)
}
fmt.Printf("%+v", translation)
}