unmasrshal_url.go 981 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "log"
  7. "net/http"
  8. "strings"
  9. )
  10. func UnmasrshalFromUrl(url string, v interface{}) error {
  11. // Usage:
  12. // <url> - string with web url to raw json data
  13. // <JsonStruct> - struct type that describes json data at <url>
  14. //
  15. // -- code --
  16. // var parseTo <JsonStruct>
  17. // err := UnmasrshalFromUrl(<url>, &parseTo)
  18. // -- code --
  19. webClient := &http.Client{}
  20. // Get response from url
  21. webResp, err := webClient.Get(url)
  22. if err != nil {
  23. log.Println(err)
  24. return err
  25. }
  26. // Close response body
  27. defer webResp.Body.Close()
  28. // Convert from Reader to []byte
  29. jsonData, err := io.ReadAll(webResp.Body)
  30. if err != nil {
  31. log.Println(err)
  32. return err
  33. }
  34. // Convert []byte to string
  35. jsonDataStr := fmt.Sprintf("%s", jsonData)
  36. jsonDataStr = strings.ReplaceAll(jsonDataStr, "null", "0")
  37. // Covenrt string ot []byte
  38. jsonData = []byte(jsonDataStr)
  39. // LogDebug.Println(v)
  40. return json.Unmarshal([]byte(jsonData), &v)
  41. }