반응형
목표
- model 을 쓰지 않고, 바로 json 을 언마샬하려고 한다. (바로 변수에 담기 )
- 단일 json 을 위해 model 을 만드는게 싫기 때문에 ..
https://mingrammer.com/gobyexample/json/
핵심코드
byt := []byte(`{"num":6.13,"strs":["a","b"]}`)
var dat map[string]interface{}
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
fmt.Println(dat)
num := dat["num"].(float64)
fmt.Println(num)
주의할점은.. 언마샬 후 형변환을 수동으로 해야함
이것도 필수로 보자
Changing from 'float64' to 'int' for Values did Unmarshal using 'map[string]interface{}'
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
data := `{"key": 10}`
var i map[string]interface{}
json.Unmarshal([]byte(data), &i)
val1 := i["key"]
fmt.Printf("%v, %v\n", val1, reflect.TypeOf(val1)) // 10, float64
i["key"] = int(i["key"].(float64))
val2 := i["key"]
fmt.Printf("%v, %v\n", val2, reflect.TypeOf(val2)) // 10, int
}
아무튼 이 두개를 조합해서 개발했다
그러나
로컬에서는 정상작동하는데, 실서버에서 float64 -> int 로 변환하는 곳에서 에러가 발생한다.
interface conversion: interface {} is float64, not int
실행시 발생하는건 아닌걸로 보이는데.... 정확히 분석하려다가 굳이 interface 를 쓸필요가 없을걸로 결론남
내가 고집해서 interface 사용하려고 억지로 한것같은 느낌이 들어서 다시 구조체로 그냥 사용했다.
로컬에서 발생안하니 더 발견하기 짜증나기도했다..
쓸데 없는 모델은 한번더 선언한거같은데.... 위 interface로 하는 방식도 그리 깔끔해보이진 않아서..
간만에 걍 타협했음
반응형
'Web > GoLang' 카테고리의 다른 글
[golang] json 파싱시 int, string 동시에 받기 (0) | 2021.08.27 |
---|---|
[golang] URL 인코딩 방법 (0) | 2021.08.27 |
[golang] 몽고 빈값 체크 (0) | 2021.08.17 |
[golang] validator 유효성 체크 라이브러리 (0) | 2021.08.06 |
go echo request param 획득 방법 (0) | 2021.08.06 |
댓글