def _row_tuple_from_json(row, schema):
    """Convert JSON row data to row with appropriate types.

    Note:  ``row['f']`` and ``schema`` are presumed to be of the same length.

    :type row: dict
    :param row: A JSON response row to be converted.

    :type schema: tuple
    :param schema: A tuple of
                   :class:`~google.cloud.bigquery.schema.SchemaField`.

    :rtype: tuple
    :returns: A tuple of data converted to native types.
    """
    row_data = []
    for field, cell in zip(schema, row["f"]):
        converter = _CELLDATA_FROM_JSON[field.field_type]
        if field.mode == "REPEATED":
            row_data.append([converter(item["v"], field) for item in cell["v"]])
        else:
            row_data.append(converter(cell["v"], field))

    return tuple(row_data)