JSON storage of data for a to-do list application I am making a to-do list application in Python that will show tasks/subtasks/sub-sub-tasks in a tree view, but with higher-level clades of tasks grouped into blocks (e.g., Work block, Home block). So something like:

To Do List
|--Home Tasks
|  |--Clean room
|  |--Get storage unit
|
|--Work Tasks
  |--Analysis
  |--Sorting
     |--Save Files
     |  |--Pull from computer 1
     |  |--Walk to computer 2
     |  |--Save on computer 2
     |--Sort files
     |--Plot data


My goal is to store the data as JSON, but I am totally new to this format. I am curious about the quality of the following, and any improvements I could make:

{
    "todoList": 
    [
    {
    "taskBlock": "Home", "tasks":
        [
        {"task": "Clean room", "done": false},
        {"task": "Get storage unit", "done": false}
        ]
    },
    {
    "taskBlock": "Work", "tasks":
        [
        {"task": "Analysis", "done": false},
        {"task": "Sorting", "done": false, "subtasks":
            [
            {"task": "Save files", "done": false, "subtasks":
                [
                {"task": "Pull from computer 1", "done": false},
                {"task": "Walk to computer 2", "done": false},
                {"task": "Save on computer 2", "done": false}        
                ]                
            },
            {"task": "Sort files", "done": false},
            {"task": "Plot data", "done": false}  
            ]
        }
        ]
    }       
    ]
}


I am used to XML, and defining a root item, but frankly I wonder if my "root" item here is superfluous (the 'todoList' parent item).
You are on the right track! Your hunch is correct that JSON doesn't really have a "root" element the way XML does. Actually, it does have a root - the opening {. Read that as "I am starting an object", the way you'd read the opening element in XML. (The thing about JSON that feels weird if you're used to XML is that you don't actually specify what type of object it is. That's the beauty [and danger] of playing fast and loose with types the way JavaScript does.)

Here's a suggested revision:

{
  "id": 100,
  "belongsToUser": "782950ce-f920-4f98-a69e-a899729e6267",
  "created": "2015-02-05T02:40:31Z",
  "lists": [{
      "name": "Home", 
      "tasks": [
        {
          "name": "Clean room", 
          "done": false

        }, {
          "name": "Get storage unit", 
          "done": false
        }
      ]
    }, {
      "name": "Work", 
      "tasks": [
        {
          "name": "Analysis", 
          "done": false
        }, {
          "name": "Sorting", 
          "done": false, 
          "subtasks": [
            {
              "name": "Save files", 
              "done": false, 
              "subtasks": [
                {
                  "name": 
                  "Pull from computer 1", 
                  "done": false

                }, {
                  "name": "Walk to computer 2", 
                  "done": false

                }, {
                  "name": "Save on computer 2", 
                  "done": false

                }]                
            },
            {
              "name": "Sort files", 
              "done": false

            }, {
              "name": "Plot data",
              "done": false
            }]
        }]
    }]
}


A few things of note:


There's no need for a root todoList attribute, but there's plenty of other good metadata that could go at the root level: primary keys or IDs, timestamps, ownership information, and so on.
I think it makes sense to have a lists array at the root, and then have object for each clade (the Home and Work blocks) under that.
Each list object can have metadata of its own (name, creation timestamp, etc), in addition to an array of tasks.