"carrier.json"파일에서 데이터를 가져 와서 정보로 Go를 사용하여 CSV 파일을 만들려고합니다. 그러나 다음과 같은 오류/고지가 나타납니다.Golang을 사용하여 json 파일을 csv 파일로 변환하려고합니다.
./carrier_json.go:53:48: obj.APIVersion undefined (type Json has no field or method APIVersion)
./carrier_json.go:53:69: obj.CarrierSid undefined (type Json has no field or method CarrierSid)
./carrier_json.go:53:85: obj.AccountSid undefined (type Json has no field or method AccountSid)
./carrierlookup.go:12:6: main redeclared in this block
previous declaration at ./carrier_json.go:31:6
나는 몇 시간 동안 온라인으로 검색했으며 도움을 주시면 감사하겠습니다. 참고, 나는별로 기술적이지 않다.
은 "carrier.json"
는{
"Message360": {
"ResponseStatus": 1,
"Carrier": {
"ApiVersion": "3",
"CarrierSid": "c7e57a2a-92d7-0430",
"AccountSid": "2f4ce81a-f08d-04e1",
"PhoneNumber": "+19499999999",
"Network": "Cellco Partnership dba Verizon Wireless - CA",
"Wireless": "true",
"ZipCode": "92604",
"City": "Irvine",
"Price": "0.0003",
"Status": "success",
"DateCreated": "2017-10-13 18:44:32"
}
}
}
나는 다음과 같은 정보를 가지고 갈 파일이라고 carrier_json.go을 가지고, 다음이있다.
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"strconv"
)
type Json struct {
Message360 struct {
ResponseStatus int `json:"ResponseStatus"`
Carrier struct {
APIVersion string `json:"ApiVersion"`
CarrierSid string `json:"CarrierSid"`
AccountSid string `json:"AccountSid"`
PhoneNumber string `json:"PhoneNumber"`
Network string `json:"Network"`
Wireless string `json:"Wireless"`
ZipCode string `json:"ZipCode"`
City string `json:"City"`
Price string `json:"Price"`
Status string `json:"Status"`
DateCreated string `json:"DateCreated"`
} `json:"Carrier"`
} `json:"Message360"`
}
func main() {
// reading data from JSON File
data, err := ioutil.ReadFile("carrier.json")
if err != nil {
fmt.Println(err)
}
// Unmarshal JSON data
var d []Json
err = json.Unmarshal([]byte(data), &d)
if err != nil {
fmt.Println(err)
}
// Create a csv file
f, err := os.Create("./carrier.csv")
if err != nil {
fmt.Println(err)
}
defer f.Close()
// Write Unmarshaled json data to CSV file
w := csv.NewWriter(f)
for _, obj := range d {
var record []string
record = append(record, strconv.FormatInt(obj.APIVersion, 10), obj.CarrierSid, obj.AccountSid)
w.Write(record)
record = nil
}
w.Flush()
}
오류 메시지는 매우 분명합니다. 'Json'은'Message360'이라는 이름의 필드 하나만 가지고 있습니다. 예를 들어 액세스하려면. 'APIVersion' 당신은'jsonObj.Message360.APIVersio'n에 액세스해야합니다 ('jsonObj'는'JSON' 타입입니다). – PieOhPah