Skip to content

Options

j-brooke edited this page Mar 31, 2024 · 16 revisions

This page covers the settings for version 4.x. Please see other pages for version 3.x, version 2.x or version 1.x.

Length and Complexity

Length and complexity are how FracturedJson decides how much to put on one line.

MaxTotalLineLength

Maximum length of a line, including indentation and everything, for purposes of deciding how much to pile together.

Example with MaxTotalLineLength=80

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,  23,  29,  31,  37,  41,  43,
         47,  53,  59,  61,  67,  71,  73,  79,  83,  89,  97, 101, 103, 107,
        109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181,
        191, 193, 197, 199
    ],
    "ComplexObject": {
        "Subthing1": {"X": 55, "Y": 19, "Z": -4},
        "Subthing2": { "Q": null, "W": [-2, -1, 0, 1] },
        "Distraction": [[], null, null]
    }
}

Example with MaxTotalLineLength=50

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,
         23,  29,  31,  37,  41,  43,  47,  53,
         59,  61,  67,  71,  73,  79,  83,  89,
         97, 101, 103, 107, 109, 113, 127, 131,
        137, 139, 149, 151, 157, 163, 167, 173,
        179, 181, 191, 193, 197, 199
    ],
    "ComplexObject": {
        "Subthing1": {"X": 55, "Y": 19, "Z": -4},
        "Subthing2": {
            "Q": null          ,
            "W": [-2, -1, 0, 1]
        },
        "Distraction": [[], null, null]
    }
}

There are still some cases where a line will go longer than this value. A single element, with indentation, property name and leading and trailing comments, can still exceed the setting. Long strings, in particular, may overrun the limit.

Example with MaxTotalLineLength=80

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,  23,  29,  31,  37,  41,  43,
         47,  53,  59,  61,  67,  71,  73,  79,  83,  89,  97, 101, 103, 107,
        109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181,
        191, 193, 197, 199
    ],
    "SomeString1": "A particularly long string for demo purposes",
    "SomeString2": "A shorter string" // with a comment
}

Example with MaxTotalLineLength=50

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,
         23,  29,  31,  37,  41,  43,  47,  53,
         59,  61,  67,  71,  73,  79,  83,  89,
         97, 101, 103, 107, 109, 113, 127, 131,
        137, 139, 149, 151, 157, 163, 167, 173,
        179, 181, 191, 193, 197, 199
    ],
    "SomeString1": "A particularly long string for demo purposes",
    "SomeString2": "A shorter string" // with a comment
}

MaxInlineLength

Like MaxTotalLineLength, this is used to limit how much gets put onto one line. But this one doesn't count indentation. You might use this instead of MaxTotalLineLength if you want to be sure that similar structures at different depths are formatted the same.

Example with MaxTotalLineLength=50, MaxInlineLength=80

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,
         23,  29,  31,  37,  41,  43,  47,  53,
         59,  61,  67,  71,  73,  79,  83,  89,
         97, 101, 103, 107, 109, 113, 127, 131
    ],
    "Wrapper1": {
        "Wrapper2": {
            "Wrapper 3": {
                "LongArray": [
                      2,   3,   5,   7,  11,  13,
                     17,  19,  23,  29,  31,  37,
                     41,  43,  47,  53,  59,  61,
                     67,  71,  73,  79,  83,  89,
                     97, 101, 103, 107, 109, 113,
                    127, 131
                ]
            }
        }
    }
}

Example with MaxTotalLineLength=80, MaxInlineLength=50

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,  23,  29,
         31,  37,  41,  43,  47,  53,  59,  61,  67,  71,
         73,  79,  83,  89,  97, 101, 103, 107, 109, 113,
        127, 131
    ],
    "Wrapper1": {
        "Wrapper2": {
            "Wrapper 3": {
                "LongArray": [
                      2,   3,   5,   7,  11,  13,  17,  19,  23,  29,
                     31,  37,  41,  43,  47,  53,  59,  61,  67,  71,
                     73,  79,  83,  89,  97, 101, 103, 107, 109, 113,
                    127, 131
                ]
            }
        }
    }
}

MaxInlineComplexity

The maximum nesting level that can be displayed on a single line. A primitive type or an empty array or object has a complexity of 0. An object or array has a complexity of 1 greater than its most complex child.

Example with MaxInlineComplexity=2

{
    "ComplexObject": {
        "Subthing1": {"X": 55, "Y": 19, "Z": -4},
        "Subthing2": { "Q": null, "W": [-2, -1, 0, 1] },
        "Distraction": [[], null, null]
    }
}

Example with MaxInlineComplexity=1

{
    "ComplexObject": {
        "Subthing1": {"X": 55, "Y": 19, "Z": -4},
        "Subthing2": {
            "Q": null          ,
            "W": [-2, -1, 0, 1]
        },
        "Distraction": [[], null, null]
    }
}

MaxCompactArrayComplexity

Maximum nesting level that can be arranged spanning multiple lines, with multiple items per line.

Example with MaxCompactArrayComplexity=1

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,  23,  29,  31,  37,  41,  43,  47,  53,  59,  61,
         67,  71,  73,  79,  83,  89,  97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
        157, 163, 167, 173, 179, 181, 191, 193, 197, 199
    ],
    "LongArray2": [
        [19,  2],
        [ 3,  8],
        [14,  0],
        [ 9,  9],
        [ 9,  9],
        [ 0,  3],
        [10,  1],
        [ 9,  1],
        [ 9,  2],
        [ 6, 13],
        [18,  5],
        [ 4, 11],
        [12,  2]
    ]
}

Example with MaxCompactArrayComplexity=2

{
    "LongArray": [
          2,   3,   5,   7,  11,  13,  17,  19,  23,  29,  31,  37,  41,  43,  47,  53,  59,  61,
         67,  71,  73,  79,  83,  89,  97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
        157, 163, 167, 173, 179, 181, 191, 193, 197, 199
    ],
    "LongArray2": [
        [19,  2], [ 3,  8], [14,  0], [ 9,  9], [ 9,  9], [ 0,  3], [10,  1], [ 9,  1], [ 9,  2],
        [ 6, 13], [18,  5], [ 4, 11], [12,  2]
    ]
}

MaxTableRowComplexity

Maximum nesting level allowed as a row of a table-formatted array/object.

Example with MaxTableRowComplexity=2, MaxInlineComplexity=2

{
    "Rect" : { "position": {"x": -44, "y":  3.4        }, "color": [0, 255, 255] },
    "Point": { "position": {          "y": 22.0, "z": 3}                         },
    "Oval" : { "position": null                         , "color": "#7f3e96"     }
}

Example with MaxTableRowComplexity=1, MaxInlineComplexity=2

{
    "Rect": { "position": {"x": -44, "y": 3.4}, "color": [0, 255, 255] },
    "Point": { "position": {"y": 22, "z": 3} },
    "Oval": {"position": null, "color": "#7f3e96"}
}

Example with MaxTableRowComplexity=1, MaxInlineComplexity=1

{
    "Rect": {
        "position": {"x": -44, "y": 3.4},
        "color": [0, 255, 255]
    },
    "Point": {
        "position": {"y": 22, "z": 3}
    },
    "Oval": {"position": null, "color": "#7f3e96"}
}

MinCompactArrayRowItems

Minimum number of items per line to be eligible for compact-multiline-array formatting. (This isn't exact - some data sets could confuse the evaluation.)

Example with MinCompactArrayRowItems=3, MaxTotalLineLength=100

{
    "Books": [
        "Harry Potter and the Philosopher's Stone",
        "The Fellowship of the Ring"              ,
        "A Night in the Lonesome October"         ,
        "Neuromancer"                             ,
        "The Hitchhiker's Guide to the Galaxy"
    ]
}

Example with MinCompactArrayRowItems=2, MaxTotalLineLength=100

{
    "Books": [
        "Harry Potter and the Philosopher's Stone", "The Fellowship of the Ring"              ,
        "A Night in the Lonesome October"         , "Neuromancer"                             ,
        "The Hitchhiker's Guide to the Galaxy"
    ]
}

AlwaysExpandDepth

Forces elements close to the root to always fully expand, regardless of other settings.

AlwaysExpandDepth=-1, MaxInlineComplexity=3

[ [1, 2, 3], [ [4, 5], [6, 7] ] ]

AlwaysExpandDepth=0, MaxInlineComplexity=3

[
    [1, 2, 3],
    [ [4, 5], [6, 7] ]
]

AlwaysExpandDepth=1, MaxInlineComplexity=3

[
    [
        1,
        2,
        3
    ],
    [
        [4, 5],
        [6, 7]
    ]
]

Padding and Indenting

IndentSpaces

Indents by this number of spaces for each level of depth. (Ignored if UseTabToIndent=true.)

UseTabToIndent

If true, a single tab character is used to indent, instead of spaces.

SimpleBracketPadding

If true, a space is added between an array/object's brackets and its contents, if that array/object has a complexity of 1. That is, if it only contains primitive elements and/or empty arrays/objects.

Example with SimpleBracketPadding=false

{
    "Subthing1": {"X": 55, "Y": 19, "Z": -4},
    "Subthing2": { "Q": null, "W": [-2, -1, 0, 1] },
    "Distraction": [[], null, null]
}

Example with SimpleBracketPadding=true

{
    "Subthing1": { "X": 55, "Y": 19, "Z": -4 },
    "Subthing2": { "Q": null, "W": [ -2, -1, 0, 1 ] },
    "Distraction": [ [], null, null ]
}

NestedBracketPadding

If true, a space is added between an array/object's brackets and its contents, if that array/object has a complexity of 2 or more. That is, if it contains non-empty arrays/objects.

Example with NestedBracketPadding=true

{
    "Subthing1": {"X": 55, "Y": 19, "Z": -4},
    "Subthing2": { "Q": null, "W": [-2, -1, 0, 1] },
    "Distraction": [[], null, null]
}

Example with NestedBracketPadding=false

{
    "Subthing1": {"X": 55, "Y": 19, "Z": -4},
    "Subthing2": {"Q": null, "W": [-2, -1, 0, 1]},
    "Distraction": [[], null, null]
}

ColonPadding

If true, a space is added after a colon.

CommaPadding

If true, a space is added after a comma.

CommentPadding

If true, a space is added between a prefix/postfix comment and the element to which it is attached.

OmitTrailingWhitespace

If true, the generated JSON text won't have spaces at the ends of lines. If OmitTrailingWhitespace is false and CommaPadding is true, often lines will end in a space. (There are a few other cases where it can happen too.) Defaults to false in the .NET and JavaScript libraries for sake of backward compatibility.

JsonEolStyle

Determines which sort of line endings to use.

Miscellaneous

NumberListAlignment

Controls how lists or table columns that contain only numbers and nulls are aligned. The default value - Normalize - allows the numbers to be parsed and rewritten, all with the same number of digits after the decimal point. (This only works if all of the numbers can be written in 15 or fewer characters without scientific notation.). The other three options, Left, Right, and Decimal align the values using their exact representations from the input document.

Example with NumberListAlignment=Left, MaxTotalLineLength=60

[
    {"a": 123.456 , "b": 0      , "c": 0   },
    {"a": 234567.8, "b": 0      , "c": 0   },
    {"a": 3       , "b": 0.00000, "c": 7e2 },
    {"a": null    , "b": 2e-1   , "c": 80e1},
    {"a": 5.6789  , "b": 3.5e-1 , "c": 0   }
]

Example with NumberListAlignment=Right, MaxTotalLineLength=60

[
    {"a":  123.456, "b":       0, "c":    0},
    {"a": 234567.8, "b":       0, "c":    0},
    {"a":        3, "b": 0.00000, "c":  7e2},
    {"a":     null, "b":    2e-1, "c": 80e1},
    {"a":   5.6789, "b":  3.5e-1, "c":    0}
]

Example with NumberListAlignment=Decimal, MaxTotalLineLength=60

[
    {"a":    123.456 , "b": 0      , "c":  0  },
    {"a": 234567.8   , "b": 0      , "c":  0  },
    {"a":      3     , "b": 0.00000, "c":  7e2},
    {"a":   null     , "b": 2e-1   , "c": 80e1},
    {"a":      5.6789, "b": 3.5e-1 , "c":  0  }
]

Example with NumberListAlignment=Normalize, MaxTotalLineLength=60

[
    {"a":    123.4560, "b": 0.00, "c":   0},
    {"a": 234567.8000, "b": 0.00, "c":   0},
    {"a":      3.0000, "b": 0.00, "c": 700},
    {"a":   null     , "b": 0.20, "c": 800},
    {"a":      5.6789, "b": 0.35, "c":   0}
]

CommentPolicy

Determines how comments should be handled. The JSON standard doesn't allow comments, but as an unofficial extension they are fairly wide-spread and useful.

  • TreatAsError - Comments found in the input will cause exceptions.
  • Remove - Comments in the input won't cause exceptions, but they won't be included in the output.
  • Preserve - Comments in the input will be included in the output.

PreserveBlankLines

If true, blank lines (lines containing only whitespace) from the input will be reproduced in the output.

AllowTrailingCommas

If true, the final element in an array or object in the input may have a comma after it; otherwise an exception is thrown. The JSON standard doesn't allow trailing commas, but some other tools allow them, so the option is provided for interoperability with them.

PrefixString

A string to be included at the start of every line of output. Note that if this string is anything other than whitespace, it will probably make the output invalid as JSON.