2

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
}

それを行う正しい方法はどれですか?

4

2 に答える 2

4

2 つの構造体定義を 1 つに統合する実際の例を次に示します。

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)
    }
}
于 2012-12-06T17:17:21.620 に答える
0

データを 3 つの部分に分割できます。配列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"`
        }
    }
}

完全な作業では:

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)
}
于 2012-12-06T17:13:57.427 に答える