As I said in the comments, I'm not an expert in datapacks at all, but just from looking at the wiki and the Vanilla loot tables I've created a datapack that works.
Folder structure:
saves
└<world_name>
└datapacks
└<datapack_name>
├pack.mcmeta
└data
└minecraft
└loot_tables
└blocks
└grass_block.json
Contents of pack.mcmeta
:
{"pack":{"pack_format":3,"description":""}}
Contents of grass_block.json
:
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"name": "minecraft:grass_block"
},
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"name": "minecraft:dirt",
"functions":[
{
"function": "minecraft:set_count",
"count": {
"min": 10.0,
"max": 10.0
}
}
]
}
]
}
]
}
]
}
This is likely way more than you actually need, but it works. Going from there you can experiment with leaving stuff out and seeing what breaks it or not. (And please tell me then!)