카테고리 없음

[Golang] 고랭에서 json 데이터 읽고 파싱하기

new_challenge 2020. 5. 19. 00:33
반응형

이번 포스팅은 고랭에서 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)

os.Open에 대한 설명

 

func ioutil.ReadAll (r io.Reader()) ([]byte, error)

ioutil.ReadAll에 대한 함수 설명

 

Json 디코딩

json.Unmarshal(byteValue, &info)

 

func json.Unmarshal(data []byte, v interface{}) error

json.Unmarshal에 대한 함수 설명

 

> 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)

 

반응형