Basically every recipe output has an additional data property:

    "type": "crafting_shapeless",
    "ingredients": [
            "item": "minecraft:apple"
    "result": {
        "item": "minecraft:diamond_axe",
        "data": ...

The data attribute represents the items nbt tag in JSON. Before the conversion to nbt data happens the JSON is passed through Nbt Crafting's JSON Preprocessor. Additionally dollars may be used for more complicated recipes that require processing the data.

It may look like this:

"data": {
    "display": {
        "Name": "{\"text\":\"Battle Axe\"}"
    "Enchantments": [
            "id": "minecraft:sharpness",
            "lvl": 10