[Golang] 고랭에서 json 데이터 읽고 파싱하기
이번 포스팅은 고랭에서 json데이터를 로딩하고
사용하는 방법에 관한 포스팅 입니다.
Golang에서 MongoDB를 접속하여 사용할 때
중요한 승인 정보들은 코드 밖에서 따로 관리하여
사용할 수 있도록, json 파일로 저장 된 접속 정보를
읽고 파싱하는 예제
Json 형태의 데이터를 선언하고 사용 (단일 데이터)
Json 형태의 데이터가 1개일때 아래와 같이 사용한다
따로 파일을 로딩 하는 것이 아니라, 코드 안쪽에서 선언해서 사용
필요한 패키지 import
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
> encoding/json 패키지는 json.Unmarshal() 에 사용 : json 디코딩
> fmt 패키지는 fmt.Println() 에 사용 : print
> io.ioutil 패키지는 ioutil.ReadAll() 에 사용 : 파일 속 내용을 로딩
> os 패키지는 os.Open()에 사용 : 파일 열기
데이터 선언
auth := `{
"username" : "admin",
"password" : "[password입력]",
"hostname" : "[host정보입력]",
"port" : "27017"
}`
접속 할 디비 정보를 입력한다.
사용할 Struct 선언
type Info struct{
Username string
Password string
Hostname string
Port string
}
선언한 데이터의 형태에 맞게 struct를 구성하고 정의한다.
사용 할 변수 선언
var info Info
사용할 변수를 지정하고 타입은 위에서 선언한 struct로 정의한다
Json 디코딩
json.Unmarshal([]byte(auth), &info)
JSON으로 인코딩된 데이타를 다시 디코딩. Unmarshal() 첫번째 파라미터에 바이트 array 형태의 데이터, 두번째 파라미터에는 출력되는 구조를 포인터로 지정한다. 리턴값은 에러이고, 에러가 없을 경우, 두번째 파라미터에 원래 데이터 들어간다
결과 출력
fmt.Println(info)
전체 코드
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
auth := `{
"username" : "admin",
"password" : "[password입력]",
"hostname" : "[host정보입력]",
"port" : "27017"
}`
type Info struct{
Username string
Password string
Hostname string
Port string
}
var info Info
json.Unmarshal([]byte(auth), &info)
fmt.Printf("%s, %s, %s, %s",info.Username, info.Password, info.Hostname, info.Port)
fmt.Println()
fmt.Println(info)
Json 형태의 데이터를 선언하고 사용 (리스트 데이터)
Json 형태의 데이터가 여러개일 때 아래와 같이 사용한다
따로 파일을 로딩 하는 것이 아니라, 코드 안쪽에서 선언해서 사용
필요한 패키지 import
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
데이터 선언
auth := `[{
"username" : "admin",
"password" : "[password입력]",
"hostname" : "[host정보입력]",
"port" : "27017"
},{
"username" : "admin",
"password" : "[password입력]",
"hostname" : "[host정보입력]",
"port" : "27017"
}]`
리스트 안에 json 형태의 데이터를 선언한다
사용할 Struct 선언
type Info struct{
Username string
Password string
Hostname string
Port string
}
사용 할 변수 선언
var infos []Info
struct 앞에 []를 붙여서 리스트 임을 나타낸다.
Json 디코딩
json.Unmarshal([]byte(auth), &infos)
JSON으로 인코딩된 데이타를 다시 디코딩. Unmarshal() 첫번째 파라미터에 바이트 array 형태의 데이터, 두번째 파라미터에는 출력되는 구조를 포인터로 지정한다. 리턴값은 에러이고, 에러가 없을 경우, 두번째 파라미터에 원래 데이터 들어간다
결과 출력
fmt.Println(infos)
전체 코드
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
authlist := `[{
"username" : "admin",
"password" : "pwdtlchd50wh",
"hostname" : "49.247.134.77",
"port" : "27017"
},{
"username" : "admin2",
"password" : "pwdtlchd50wh2",
"hostname" : "49.247.134.772",
"port" : "270172"
}]`
// list로 들어오는 경우는 아래와 같이
var infos []Info
json.Unmarshal([]byte(authlist), &infos)
fmt.Println(infos)
JSON 파일을 로딩 시켜서 파싱하는 경우
Json 파일이 존재하고, 그 파일을 불러와서 로딩하고 파싱할 때
필요한 패키지 import
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
사용할 Struct 선언
type Info struct{
Username string
Password string
Hostname string
Port string
}
사용 할 변수 선언
var info Info
데이터 파일 오픈 및 로딩
# 사용자 정보가 담겨 있는 json 파일
data, err := os.Open("auth.json")
# 에러 확인
if err != nil {
fmt.Println(err)
}
# open한 json을 읽는다
byteValue, _ := ioutil.ReadAll(data)
func os.Open (name string) (*os.File, error)
func ioutil.ReadAll (r io.Reader()) ([]byte, error)
Json 디코딩
json.Unmarshal(byteValue, &info)
func json.Unmarshal(data []byte, v interface{}) error
> Unmarshal 은 JSON으로 인코딩된 데이터를 파싱하고, 그 결과를 두번째 인자에 포인트 된 값에 저장 한다. 그리고 InvalidUnmarshalError를 리턴한다
결과 출력
fmt.Println(info)
전체 코드
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type Info struct{
Username string
Password string
Hostname string
Port string
}
data, err := os.Open("auth.json")
byteValue, _ := ioutil.ReadAll(data)
var db_info Info
json.Unmarshal(byteValue, &db_info)
fmt.Println(db_info)