programing

golang에서 json 파일을 json 객체로 읽는 방법은 무엇입니까?

telecom 2023. 3. 1. 09:30
반응형

golang에서 json 파일을 json 객체로 읽는 방법은 무엇입니까?

로컬 머신에 JSON 파일이 저장되어 있습니다.JSON 객체 값을 가져오려면 변수를 읽고 루프해야 합니다.ioutil을 사용하여 파일을 읽은 후 Marshal 명령을 사용하는 경우.Readfile 메서드는 출력으로 몇 가지 숫자를 제공합니다.몇 번 실패했지만

시행 1:

plan, _ := ioutil.ReadFile(filename) // filename is the JSON file to read
var data interface{}
err := json.Unmarshal(plan, data)
if err != nil {
        log.Error("Cannot unmarshal the json ", err)
      }
fmt.Println(data)

그것은 나에게 다음과 같은 오류를 주었다.

time="2016-12-13T22:13:05-08:00" level=error msg="Cannot unmarshal the json json: Unmarshal(nil)"
<nil>

시도 2: JSON 값을 구조체에 저장하고 MarshalIndent를 사용하려고 했습니다.

generatePlan, _ := json.MarshalIndent(plan, "", " ") // plan is a pointer to a struct
fmt.Println(string(generatePlan))

출력은 문자열로 표시됩니다.그러나 출력을 문자열에 캐스팅하면 JSON 개체로 루프할 수 없습니다.

골랑에서 JSON 파일을 JSON 오브젝트로 읽으려면 어떻게 해야 하나요?그렇게 할 수 있을까요?어떤 도움이라도 감사합니다.잘 부탁드립니다!

입력되는 값json.Unmarshal포인터여야 합니다.

GoDoc에서:

Unmarshal은 JSON 인코딩된 데이터를 구문 분석하고 v가 가리키는 값에 결과를 저장합니다.

따라서 다음 작업을 수행해야 합니다.

plan, _ := ioutil.ReadFile(filename)
var data interface{}
err := json.Unmarshal(plan, &data)

오류(Unmarshal(nil))는 파일 읽기 중 문제가 발생했음을 나타냅니다.에서 반환된 오류를 확인하십시오.ioutil.ReadFile


또한 unmarshal에서 빈 인터페이스를 사용할 때는 type assertion을 사용하여 기본 값을 go primitive type으로 가져올 필요가 있습니다.

JSON을 인터페이스 값으로 변환 해제하려면 Unmarshal은 다음 중 하나를 인터페이스 값에 저장합니다.

bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null

콘크리트 구조를 사용하여 json을 채우는 것이 항상 훨씬 더 나은 접근법입니다.Unmarshal.

2022년에 이걸 보면ioutil패키지가 더 이상 사용되지 않습니다.아직 사용할 수 있지만, 귀찮은 오류가 발생할 수 있습니다.

대신 os 패키지를 사용할 수 있습니다.

someStruct := SomeStruct{}  // Read errors caught by unmarshal
fileBytes, _ := os.ReadFile(filename)   
err := json.Unmarshal(fileBytes, spec) 

주의하세요, 저는 특히 이 에러를 무시하고 있습니다.os.ReadFile에러도 일으키기 때문에json.Unmarshal예를 들어서.

언급URL : https://stackoverflow.com/questions/41135686/how-can-we-read-a-json-file-as-json-object-in-golang

반응형