구조체 포인터를 JSON 포맷으로 출력하려면...

129 views
Skip to first unread message

eric

unread,
Oct 19, 2016, 8:50:23 PM10/19/16
to GDG Korea Golang


안녕하세요, Golang을 막 시작한 개발자입니다.

아래와 같이 구조체 슬라이스 포인터에 데이터가 들어가 있는 것은 확인되는 데, json 포맷으로 출력하면

빈 값이 나와 버립니다... ㅠㅠ

어떻게 하면 json 포맷으로 데이터를 출력할 수 있을 까요? 



package main

import (
"encoding/json"
"fmt"
)

type KV struct {
k string
v string
}

func main() {
kv := []*KV{}

obj := new(KV)
obj.k = "eric"
obj.v = "23"
kv = append(kv, obj)

obj = new(KV)
obj.k = "robot"
obj.v = "32"

kv = append(kv, obj)

fmt.Printf("%d\n", len(kv))
fmt.Printf("%v\n", kv)

b, _:= json.MarshalIndent(kv, "", "  ")
fmt.Println(string(b))

}

Jooyung Han

unread,
Oct 19, 2016, 9:11:54 PM10/19/16
to GDG Korea Golang
구조체의 필드가 export되어야 하네요. k,v를 대문자로 바꾸면 됩니다.

"Struct values encode as JSON objects. Each exported struct field becomes a member of the object unless"



2016년 10월 20일 (목) 오전 9:50, eric <mira...@gmail.com>님이 작성:
--
--
* 이 그룹에 이메일로 게시하려면 다음 주소로 이메일을 보내시면 됩니다.
golang...@googlegroups.com
* 추가 옵션을 보려면 http://groups.google.com/group/golang-korea?hl=ko?hl=ko의 그룹을 방문하세요.
---
이 메일은 Google 그룹스 'GDG Korea Golang' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 golang-korea...@googlegroups.com에 이메일을 보내세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

Jaehyun Yeom

unread,
Oct 19, 2016, 9:13:21 PM10/19/16
to GDG Korea Golang
필드 이름이 소문자로 시작하기 때문에 export 되지 않은 이름이라서 그렇습니다. 자바 같은 언어에서 private 필드라고 생각하시면 됩니다. export 되지 않은 이름은 JSON 값으로 export 되지 않습니다.

방법은 필드 이름을 대문자로 시작하게 바꾸시면 됩니다.

그렇지만 JSON으로 출력되는 필드명은 소문자로 시작하게 하고 싶은 경우라면 아래 코드를 참고하세요.


--

eric

unread,
Oct 20, 2016, 1:00:35 AM10/20/16
to GDG Korea Golang
아, 그러네요, 감사합니다.!

2016년 10월 20일 목요일 오전 9시 50분 23초 UTC+9, eric 님의 말:
Reply all
Reply to author
Forward
0 new messages