2014-08-31 2 views
10

Я играю с Go, и я озадачен, почему JSON кодирования и декодирования не работают для меня(ООН) сортировочный golang JSON не работает

Я думаю, что я скопировал примеры почти дословно, но вывод говорит как маршалы, так и немаршалы не возвращают никаких данных. Они также не дают ошибки.

может кто-нибудь намекнуть туда, где я иду не так?

мой пример кода: Go playground

package main 

import "fmt" 
import "encoding/json" 

type testStruct struct { 
    clip string `json:"clip"` 
} 

func main() { 
//unmarshal test 
    var testJson = "{\"clip\":\"test\"}" 
    var t testStruct 
    var jsonData = []byte(testJson) 
    err := json.Unmarshal(jsonData, &t) 
    if err != nil { 
     fmt.Printf("There was an error decoding the json. err = %s", err) 
     return 
    } 
    fmt.Printf("contents of decoded json is: %#v\r\n", t) 

//marshal test 
    t.clip = "test2" 
    data, err := json.Marshal(&t) 
    if err != nil { 
     fmt.Printf("There was an error encoding the json. err = %s", err) 
     return 
    } 
    fmt.Printf("encoded json = %s\r\n", string(data)) 
} 

выход:

contents of decoded json is: main.testStruct{clip:""} 
encoded json = {} 

в обоих выходах я ожидал бы увидеть декодированный или кодированный JSON

ответ

20

Например,

package main 

import "fmt" 
import "encoding/json" 

type testStruct struct { 
    Clip string `json:"clip"` 
} 

func main() { 
    //unmarshal test 
    var testJson = "{\"clip\":\"test\"}" 
    var t testStruct 
    var jsonData = []byte(testJson) 
    err := json.Unmarshal(jsonData, &t) 
    if err != nil { 
     fmt.Printf("There was an error decoding the json. err = %s", err) 
     return 
    } 
    fmt.Printf("contents of decoded json is: %#v\r\n", t) 

    //marshal test 
    t.Clip = "test2" 
    data, err := json.Marshal(&t) 
    if err != nil { 
     fmt.Printf("There was an error encoding the json. err = %s", err) 
     return 
    } 
    fmt.Printf("encoded json = %s\r\n", string(data)) 
} 

Выход:

contents of decoded json is: main.testStruct{Clip:"test"} 
encoded json = {"clip":"test2"} 

площадка:

http://play.golang.org/p/3XaVougMTE

Экспорт в поле структуры.

type testStruct struct { 
    Clip string `json:"clip"` 
} 

Exported identifiers

Идентификатор может быть экспортирована, чтобы разрешить доступ к нему из другого пакета. Идентификатор экспортируется, если оба:

  • первый символ имени идентификатора - буква в верхнем регистре Юникод (класс Юникода «Лу»); и
  • идентификатор объявляется в блоке пакета или это имя поля или имя метода.

Все остальные идентификаторы не экспортируются.

+1

wow ... Я знал про верхний регистр, но никогда не понимал, что это повлияло на кодируемость json (это слово?). Спасибо за недостающее понимание – Toad

Смежные вопросы