json.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package log_temperature
  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. func NewJsonParser(reader *bufio.Reader) Parser {
  13. return &jsonParser{Reader: reader}
  14. }
  15. // {"time" : "2018-04-13 23:04:50", "model" : "Acurite 606TX Sensor", "id" : -5, "battery" : "OK", "temperature_C" : 21.800}
  16. type jsonPacket struct {
  17. Time string
  18. Model string
  19. ID int
  20. Battery string
  21. Temperature_C float64
  22. }
  23. // Measure returns the temperature. Null if it can't
  24. func (jp jsonParser) Measure() (*Measurement, error) {
  25. text, err := jp.Reader.ReadString('\n')
  26. if err != nil {
  27. return nil, err
  28. }
  29. buffer := []byte(text)
  30. if json.Valid(buffer) {
  31. var jsonPacket jsonPacket
  32. err = json.Unmarshal(buffer, &jsonPacket)
  33. if err != nil {
  34. fmt.Println(err.Error())
  35. return nil, err
  36. }
  37. fmt.Println("temp is " + strconv.FormatFloat(jsonPacket.Temperature_C, 'f', 6, 64))
  38. return &Measurement{ID: jsonPacket.ID, Temperature: jsonPacket.Temperature_C}, nil
  39. }
  40. return nil, nil
  41. }