Enforcing a JSON string array structure

I have this code:

system_message = "You are a book reviewer."

user_message = """
  Write a JSON file containing the genres of the book "1984" by George Orwell.
  The JSON file should consist of an array of strings, where each string represents a genre.
"""

messages = [
    {'role': 'system', 'content': system_message},
    {'role': 'user', 'content': user_message},
]

openai.ChatCompletion.create(model=model, messages=messages, temperature=temperature, max_tokens=max_tokens)

It works most of the times. Example correct response:
["Political fiction", "Science fiction"]

However, sometimes it incorrectly generates this:
{'Genres': ["Political fiction", "Science fiction"]}

I’ve tried adding the following to the user_message: “Do not assign a field name to the array.”. However it sometimes it still fails.

Any idea of how to enforce the structure, so that I can programmatically parse the response?
I could ask to write a line for each string (instead of using JSON), but some of the values I request contains new lines, so it’s not an option.
Maybe it works better with XML?
Any experience on enforcing a structure?