File format

The CanQuiz JSON quiz format, field by field

A CanQuiz quiz exports as a .json file: text holding the questions, the options and the answers. Here is its format field by field, with an example that opens in the browser without an account.

It opens at app.canquiz.com/abrir. The file is read in your browser.

What it is and where it comes from

It is what you download from a quiz's export button when you choose "JSON (to import back)". It weighs a few kilobytes, travels over WhatsApp or email like any attachment and never expires, which is why quizzes get passed around this way.

If someone sent you one, you do not need any of what follows: drop it on app.canquiz.com/abrir and take the quiz. This page is for anyone who wants to know what is inside, write one by hand or have another tool generate them.

The top level

The file is a JSON object. The only essentials are the list of questions and the settings object, even if it is empty.

questionslistrequired
The questions, in the order they appear. At least one. Each one is described below.
settingsobjectrequired
How the quiz plays: shuffling, pass mark, explanations. It must be present even when empty; all its fields are optional.
metadataobject
Data about the quiz. The field CanQuiz reads when opening it is title_suggestion, the title offered when the file brings no other, up to 120 characters. Everything else is kept as it is.
_canquiz_urltext
Added on export along with _canquiz: the link to the original quiz and a one-line note. Both are stripped when the file is opened, so you can delete them or leave them.

The same content also opens wrapped in another object with two fields, title and content: title becomes the quiz title and content holds questions, settings and metadata.

Each question

The same fields for every type. Answers are matched as exact text, so whatever goes in correct_answer must be written exactly as it is in options.

idtextrequired
A short identifier such as q1, q2, q3. It is never shown, but it cannot repeat within a quiz: importing into an account rejects duplicates.
typetextrequired
The question type, exactly as written: single_choice, multiple_choice, true_false, question_answer, short_answer or code_recall. They are explained in the next section.
questiontextrequired
The question text, up to 2000 characters. Text only: the format carries no images.
optionslist
The answer options, each up to 1000 characters. Required for questions you choose from; open questions leave this field out.
correct_answertext or listrequired
The exact text of the correct option, or a list of texts for multiple_choice. For open questions, the expected answer. Up to 2000 characters.
explanationtext
Why it is correct, up to 20000 characters. Shown after answering when the quiz has explanations turned on.

Question types

The value of type decides which fields are needed and how an answer is marked.

single_choiceone correct
One correct option among several. correct_answer is a text that has to match one of the options.
multiple_choiceseveral correct
At least two options, with one or more correct. correct_answer is a list with the text of each correct option.
true_falsetrue or false
Exactly two options, in any language (True and False, Verdadero and Falso). correct_answer is one of the two.
question_answeropen
No options. It is answered in writing and marked by AI against correct_answer, the model answer. That marking needs an account.
short_answershort answer
No options. It is answered with a word or a short phrase and marked on the device itself, ignoring case, accents, punctuation and a leading article. correct_answer can be a list of accepted answers.
code_recallcode exercise
CanQuiz's programming exercises. They carry a drill field with a long format of its own that the app generates; it is not meant to be written by hand and is not covered here.

Settings

All optional. A missing one counts as switched off, or as the usual value.

shuffle_questionstrue or false
Shuffles the order of the questions every time the quiz is taken.
shuffle_optionstrue or false
Shuffles the order of the options inside each question.
passing_scorenumber
The pass mark as a percentage, from 0 to 100.
show_explanationtrue or false
Shows the explanation when each question is marked.
show_progresstrue or false
Shows how many questions are done and how many are left.
time_limitnumber
A limit in seconds, above 0. It is accepted and kept, but CanQuiz does not apply it today: there is no countdown.
ai_strictness_levelnumber
From 1 to 10: how strict AI marking of open questions is.

A complete example

Four questions of four different types, with their settings, all marked without an account. Copy or download it and open it at app.canquiz.com/abrir to see how it looks.

{
  "metadata": {
    "title_suggestion": "Water (example)"
  },
  "settings": {
    "shuffle_questions": false,
    "shuffle_options": true,
    "passing_score": 70,
    "show_explanation": true,
    "show_progress": true
  },
  "questions": [
    {
      "id": "q1",
      "type": "single_choice",
      "question": "At what temperature does pure water boil at sea level?",
      "options": [
        "90 °C",
        "100 °C",
        "110 °C",
        "120 °C"
      ],
      "correct_answer": "100 °C",
      "explanation": "At one atmosphere of pressure, pure water boils at 100 °C (212 °F)."
    },
    {
      "id": "q2",
      "type": "multiple_choice",
      "question": "Which elements make up a water molecule?",
      "options": [
        "Hydrogen",
        "Oxygen",
        "Carbon",
        "Nitrogen"
      ],
      "correct_answer": [
        "Hydrogen",
        "Oxygen"
      ],
      "explanation": "H₂O: two hydrogen atoms and one oxygen atom."
    },
    {
      "id": "q3",
      "type": "true_false",
      "question": "Ice floats on liquid water because it is less dense.",
      "options": [
        "True",
        "False"
      ],
      "correct_answer": "True",
      "explanation": "Water expands as it freezes, and its density drops to about 0.92 g/cm³."
    },
    {
      "id": "q4",
      "type": "short_answer",
      "question": "What is water turning from liquid into gas below its boiling point called?",
      "correct_answer": "Evaporation",
      "explanation": "It happens at the surface at any temperature, which is why laundry dries on the line without reaching 100 °C."
    }
  ]
}

If you edit it, save it as plain text with the .json extension. A code editor will flag a stray comma or a missing quote.

Why a file will not open

When opening a file, CanQuiz does not guess: the file either follows the format or you get a warning. These are the usual mistakes.

The correct answer as a letter

"B" or "2" in correct_answer does not work in a file: it has to be the option's text, written the same way.

Missing settings

Even if you do not want to change anything, the settings object has to be there. Empty is fine.

A true or false with more than two options

true_false takes exactly two. For three or more, use single_choice.

An open question with options

question_answer cannot have options. If it has options, it is a question you choose from.

A misspelled type

multiple-choice with a hyphen or MultipleChoice are not types: they are lowercase with underscores.

A text that is too long

Each field has a character cap, there to stop absurd files: a question text over two thousand characters no longer opens.

Repeated ids

Two questions with the same id can still be taken without an account, but they cannot be imported into one.

If what you have is an AI chat's answer

To open an answer from ChatGPT or another AI, it does not have to follow all of this. "Paste text" at app.canquiz.com/abrir is far more forgiving: it finds the quiz inside whatever you paste, understands a correct answer given as a letter, fixes curly quotes and opens whatever arrived whole from a reply that got cut off. The prompt to ask for it is on the ChatGPT quiz maker page.

Frequently asked questions

Do I need an account to open a .json quiz?

No. At app.canquiz.com/abrir you drop or pick the file and take the whole quiz, with marking and explanations. An account is only needed to save it, review it later or edit it: once signed in, import it again from My quizzes, because what you open without an account is not saved on its own. The quiz then becomes yours and whoever sent it can no longer change it.

Is the file uploaded to a server?

Not while you stay signed out. The browser reads the file on your device and the quiz runs there. If you choose to save it, then it is stored in your CanQuiz account.

How do I export one of my quizzes as JSON?

Open the quiz in the app, press the export button and choose "JSON (to import back)". The same menu also gives you CSV, for a spreadsheet, and a text file to import into Anki.

Can I write a quiz by hand in this format?

Yes. Start from the example on this page, change the questions and answers in any text editor and save it with the .json extension. If it will not open, first check that every correct_answer is written exactly like its option.

Can another AI or my own program generate it?

Yes, it is ordinary JSON. If a program generates it, follow the fields on this page and the file opens like an exported one. If an AI chat writes it, it is easier to paste its answer into "Paste text", which forgives the usual slips.

Does it open Quizlet, Kahoot or CSV files?

No. CanQuiz only imports its own JSON. It exports to JSON, CSV and Anki, but it does not import from those tools and does not export to Quizlet or Kahoot. If your questions live somewhere else, you can paste them as text and let the AI build the quiz.

How many questions fit in one file?

When opening it, CanQuiz sets no maximum number of questions: what is capped is the text of each field, from two thousand characters for a question to twenty thousand for an explanation. A long quiz is still small, a few kilobytes of text.

Did someone send you a .json quiz?

Drop it on CanQuiz and take the quiz now, in your browser and without an account.