def METHOD_NAME(self):
    with self.source.open(encoding=self.options.encoding) as fp:
        for L in fp:
            try:
                if L.startswith('#'): # skip commented lines
                    continue
                elif not L.strip(): # skip blank lines
                    continue
                ret = json.loads(L, object_hook=AttrDict)
                if isinstance(ret, list):
                    yield from ret
                else:
                    yield ret
            except ValueError as e:
                if self.rows:   # if any rows have been added already
                    e.stacktrace = stacktrace()
                    yield TypedExceptionWrapper(json.loads, L, exception=e)  # an error on one line
                else:
                    with self.source.open(encoding=self.options.encoding) as fp:
                        ret = json.load(fp)
                        if isinstance(ret, list):
                            yield from ret
                        else:
                            yield ret
                    break