Didot leverages the PocketCsvReader parser and interprets CSV headers containing . and [], dynamically transforming them into structured nested dictionaries or lists, enabling seamless representation of hierarchical data.
Default CSV Dialect
The parser assumes the following characteristics for the CSV file:
- Delimiter: The default column delimiter is a comma (,).
 - Quotation: Fields containing delimiters, line breaks, or special characters are enclosed in double quotes (“).
 - Escape Character: Double quotes within a quoted field are escaped by doubling them (“”).
 - Header Row: The first row of the CSV file must contain column headers, which define the structure of the resulting nested dictionary.
 - Case Sensitivity: Headers are case-sensitive.
 - Row Order: Rows with the same parent-level fields are grouped together in the final output. The order of rows in the CSV affects the resulting data structure.
 
Name.Fullname,Name.Acronym,Founded
NASA,National Aeronautics and Space Administration,1958-07-29
Special Header Syntax in Didot
Dot Notation (.)
A dot (.) in a header is interpreted by the parser as indicating a nested property structure.
Each segment before a dot represents a key in a nested dictionary. The final segment represents the value assigned within that dictionary.
Example of nested properties
| Header | Interpretation | 
|---|---|
Name.Fullname | 
      Creates a dictionary Name with a key Fullname. | 
    
Name.Acronym | 
      Adds a key Acronym to the Name dictionary. | 
    
Founded | 
      Adds a top-level key Founded. | 
    
is the equivalent of this JSON representation
{
  "Name": {
    "Fullname": "NASA",
    "Acronym": "National Aeronautics and Space Administration"
  },
  "Founded": "1958-07-29"
}
List Syntax ([])
Square brackets ([]) in a header indicate that the corresponding property belongs to a list of dictionaries.
- Headers containing 
[]represent list elements. - Each row with the same parent-level fields contributes to the same list.
 - Nested properties of list items are denoted by combining 
[]with dot notation. 
Example of list
| Header | Interpretation | 
|---|---|
Buildings[].Name | 
      Creates a list Buildings where each item has a key Name. | 
    
Buildings[].Type | 
      Adds a key Type to each Buildings list item. | 
    
Buildings[].Location | 
      Adds a key Location to each Buildings list item. | 
    
is the equivalent of this JSON representation
{
  "Buildings": [
    {
      "Name": "NASA Headquarters",
      "Type": "Administration and Policy",
      "Location": "300 E Street SW, Washington, DC 20546"
    },
    {
      "Name": "Johnson Space Center",
      "Type": "Human Spaceflight Training, Research, and Mission Control",
      "Location": "2101 NASA Parkway, Houston, TX 77058"
    }
  ]
}
Combining . and []
Dot notation and square brackets can be combined in Didot to describe deeply nested structures, such as lists within nested dictionaries.
Example of combination
| Header | Interpretation | 
|---|---|
Buildings[].Details.Address.City | 
      Adds a nested dictionary Details to each Buildings list item. | 
    
Buildings[].Details.Address.ZipCode | 
      Adds a key ZipCode to Address in each Buildings list item. | 
    
is the equivalent of this JSON representation
{
  "Buildings": [
    {
      "Details": {
        "Address": {
          "City": "Washington",
          "ZipCode": "20546"
        }
      }
    },
    {
      "Details": {
        "Address": {
          "City": "Houston",
          "ZipCode": "77058"
        }
      }
    }
  ]
}
Behavior of Rows with Repeated Parent-Level Fields
In Didot, rows with the same values for all non-list fields are considered part of the same top-level object. List fields ([]) for such rows are appended to the corresponding lists.
Name.Fullname,Name.Acronym,Founded,Buildings[].Name,Buildings[].Type
NASA,National Aeronautics and Space Administration,1958-07-29,NASA Headquarters,Administration and Policy
NASA,National Aeronautics and Space Administration,1958-07-29,Johnson Space Center,Human Spaceflight Training, Research, and Mission Control
Resulting Structure
[
  {
    "Name": {
      "Fullname": "NASA",
      "Acronym": "National Aeronautics and Space Administration"
    },
    "Founded": "1958-07-29",
    "Buildings": [
      {
        "Name": "NASA Headquarters",
        "Type": "Administration and Policy"
      },
      {
        "Name": "Johnson Space Center",
        "Type": "Human Spaceflight Training, Research, and Mission Control"
      }
    ]
  }
]