@@ -21,6 +21,7 @@ import (
2121 "fmt"
2222 "math"
2323 "os"
24+ "regexp"
2425 "strconv"
2526 "strings"
2627 "text/tabwriter"
@@ -1649,34 +1650,34 @@ func parseSendDataPayload(payload string, mappingType interfaces.AstarteMappingT
16491650 case interfaces .BinaryBlobArray , interfaces .BooleanArray , interfaces .DateTimeArray , interfaces .DoubleArray ,
16501651 interfaces .IntegerArray , interfaces .LongIntegerArray , interfaces .StringArray :
16511652
1652- //wait it's all string?
1653- payload = strings .Replace (payload , "[" , "" , - 1 )
1654- payload = strings .Replace (payload , "]" , "" , - 1 )
1655- payload_parsed := strings .Split (payload , "," )
1656- //always has been
1657-
1658- jsonOut := make ([]interface {}, len (payload_parsed ))
1659- for i , v := range payload_parsed {
1660- jsonOut [i ] = v
1661- }
1662-
1663- retArray := []interface {}{}
1664- // Do a smarter conversion here.
1665- for _ , v := range jsonOut {
1666- switch val := v .(type ) {
1667- case string :
1668- p , err := parseSendDataPayload (strings .TrimSpace (val ), interfaces .AstarteMappingType (strings .TrimSuffix (string (mappingType ), "array" )))
1653+ //check if payload is an empty array, bypass conversions and just return an empty array
1654+ // if it is not, proceed as usual
1655+ if payload == "[]" {
1656+ ret = make ([]interface {}, 0 )
1657+ } else {
1658+ retArray := []interface {}{}
1659+ payload = strings .TrimSpace (payload )
1660+ if pass , err := regexp .MatchString (`^\[.*\]$` , payload ); ! pass {
1661+ return nil , err
1662+ }
1663+ payload = regexp .MustCompile (`^\[` ).ReplaceAllString (payload , "" )
1664+ payload = regexp .MustCompile (`\]$` ).ReplaceAllString (payload , "" )
1665+ payload_parsed := strings .Split (payload , "," )
1666+ jsonOut := make ([]interface {}, len (payload_parsed ))
1667+ for i , v := range payload_parsed {
1668+ jsonOut [i ] = v
1669+ }
1670+ // Do a smarter conversion here.
1671+ for _ , v := range jsonOut {
1672+ p , err := parseSendDataPayload (strings .TrimSpace (v .(string )), interfaces .AstarteMappingType (strings .TrimSuffix (string (mappingType ), "array" )))
16691673 if err != nil {
16701674 return nil , err
16711675 }
16721676 retArray = append (retArray , p )
1673- default :
1674- retArray = append (retArray , val )
16751677 }
1678+ ret = retArray
16761679 }
1677- ret = retArray
16781680 }
1679-
16801681 return ret , nil
16811682}
16821683
0 commit comments