docs: def unpack(self, gpsd_socket_response):
          """Sets new socket data as DataStream attributes in those initialised dictionaries
          Arguments:
              gpsd_socket_response (json object):
          Provides:
          self attributes, e.g., self.lat, self.gdop
          Raises:
          AttributeError: 'str' object has no attribute 'keys' when the device falls out of the system
          ValueError, KeyError: most likely extra, or mangled JSON data, should not happen, but that
          applies to a lot of things.
          """
          try:
              fresh_data = json.loads(gpsd_socket_response)  # 'class' is popped for iterator lead
              class_name = fresh_data.pop('class')
              for key in self.packages[class_name]:
                  # Fudge around the namespace collision with GST data package lat/lon being standard deviations
                  if class_name == 'GST' and key == 'lat' or 'lon':
                      setattr(self, 'sd' + key, fresh_data.get(key, 'n/a'))
                  setattr(self, key, fresh_data.get(key, 'n/a'))  # Updates and restores 'n/a' if attribute is absent in the data
  
          except AttributeError:  # 'str' object has no attribute 'keys'
              sys.stderr.write('There is an unexpected exception unpacking JSON object')
              return
  
          except (ValueError, KeyError) as error:
              sys.stderr.write(str(error))  # Extra data or aberrant data in stream.
              return