Skip to content

Python Driver's _nodeToJson() returns invalid JSON #1229

@omaurel-socha

Description

@omaurel-socha

Describe the bug
I am trying some cypher queries using the python driver.
When iterating the results of a query, The function .toJson() returns a JSON string containing a trailing comma in the "properties" field.
As a result, the JSON is invalid and it is not possible to convert it into a dict using json.loads() for example.

How are you accessing AGE (Command line, driver, etc.)?

  • Python Driver

What data setup do we need to do?

def testJson(self):

        print("\n------------------------------")
        print("Test 6: Testing JSON output.....")
        print("--------------------------------\n")

        ag = self.ag

        with ag.connection.cursor() as cursor:
            try:
                ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Joe',))
                ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Jack',))
                ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Andy',))
                ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Smith',))
                ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Tom',))

                # You must commit explicitly
                ag.commit()
            except Exception as ex:
                print(ex)
                ag.rollback()

        print(" -------- TESTING JSON #1 --------")
        cursor = ag.execCypher("MATCH (n) RETURN n")

        for row in cursor:
            # json.loads will fail if the json str is not properly formatted
            as_dict = json.loads(row[0].toJson())
        print("Vertex.toJson() returns a correct json string.")

What is the command that caused the error?

for row in cursor:
    as_dict = json.loads(row[0].toJson())

Expected behavior
The correct behavior would return valid JSON when calling .toJson().

Additional context
The problem originates in _nodeToJson(). The way the buffer writing iteration is done in the properties field will always add a trailing comma.

I have submitted a PR to fix the issue

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions