'Convert returned JSON Linodes into Node instances
:keyword objs: ``list`` of JSON dictionaries representing the Linodes
:type objs: ``list``
:return: ``list`` of :class:`Node`s'

def _to_nodes(self, objs):

    nodes = {}
    batch = []
    for o in objs:
        lid = o['LINODEID']
        nodes[lid] = n = Node(id=lid, name=o['LABEL'], public_ips=[], private_ips=[], state=self.LINODE_STATES[o['STATUS']], driver=self.connection.driver)
        n.extra = copy(o)
        n.extra['PLANID'] = self._linode_plan_ids.get(o.get('TOTALRAM'))
        batch.append({'api_action': 'linode.ip.list', 'LinodeID': lid})
    ip_answers = []
    args = ([iter(batch)] * 25)
    if PY3:
        izip_longest = itertools.zip_longest
    else:
        izip_longest = getattr(itertools, 'izip_longest', _izip_longest)
    for twenty_five in izip_longest(*args):
        twenty_five = [q for q in twenty_five if q]
        params = {'api_action': 'batch', 'api_requestArray': json.dumps(twenty_five)}
        req = self.connection.request(API_ROOT, params=params)
        if ((not req.success()) or (len(req.objects) == 0)):
            return None
        ip_answers.extend(req.objects)
    for ip_list in ip_answers:
        for ip in ip_list:
            lid = ip['LINODEID']
            which = (nodes[lid].public_ips if (ip['ISPUBLIC'] == 1) else nodes[lid].private_ips)
            which.append(ip['IPADDRESS'])
    return list(nodes.values())
