json.go 990 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package parser
  2. import (
  3. "bufio"
  4. "encoding/json"
  5. "fmt"
  6. "strconv"
  7. )
  8. // JSONParser reads the json output
  9. type JSONParser struct {
  10. Reader *bufio.Reader
  11. }
  12. // {"time" : "2018-04-13 23:04:50", "model" : "Acurite 606TX Sensor", "id" : -5, "battery" : "OK", "temperature_C" : 21.800}
  13. type jsonPacket struct {
  14. Time string
  15. Model string
  16. ID int
  17. Battery string
  18. Temperature_C float64
  19. }
  20. // Measure returns the temperature. Null if it can't
  21. func (jp JSONParser) Measure() (*Measurement, error) {
  22. text, err := jp.Reader.ReadString('\n')
  23. if err != nil {
  24. return nil, err
  25. }
  26. buffer := []byte(text)
  27. if json.Valid(buffer) {
  28. var jsonPacket jsonPacket
  29. err = json.Unmarshal(buffer, &jsonPacket)
  30. if err != nil {
  31. fmt.Println(err.Error())
  32. return nil, err
  33. }
  34. fmt.Println("temp is " + strconv.FormatFloat(jsonPacket.Temperature_C, 'f', 6, 64))
  35. return &Measurement{ID: jsonPacket.ID, Temperature: jsonPacket.Temperature_C}, nil
  36. }
  37. return nil, nil
  38. }