Neo4j driver functions equivalent to py2neo functions

def get_nlg(graph_query):
    driver = Graph("neo4j://localhost:7687", auth=("neo4j","password"))
    graph_response = graph.evaluate(graph_query)

For the above code, I replaced with the driver code as below, but its not working, what is the function in neo4j driver that perform operations and provide the result as same as evaluate() function in py2neo?

evaluate(cypher, parameters=None, **kwparameters)[source]
Run a Transaction.evaluate() operation within an autocommit Transaction.
cypher – Cypher statement
parameters – dictionary of parameters
Returns - first value from the first record returned or None.

Below is my code that replaced evaluate() with run() function, but not getting the expected result.

    def get_nlg(graph_query):
        driver = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j","password"))

        with driver.session() as session:
            graph_response =
            return graph_response

When the result from graph_response of 2nd code is passed to the below code, I am getting an error TypeError: < object at 0x7f94cf7f31d0> is not JSON serializable

class GetBiggestComponent(Action):
    def name(self):
        return "action_get_biggest_component"

    def run(self, dispatcher, tracker, domain):
        query = None
        intent = tracker.latest_message['intent']
        child_comp = tracker.get_slot('component_type_child')
        parent_comp = tracker.get_slot('component_type_parent')
        error = None
        graph_response = GenerateQuery.get_biggest_component(child_comp, parent_comp)
        graph_response['intent_name'] = intent['name']
        return []

the error is coming when it is passed in the line dispatcher.utter_custom_message(graph_response)