Just a lot easier to work with for web based stuff, and parsing, a few errors in the DATs I worked around were just because of incorrect XML structure, example each game can have 1..m ROMs but because of how the DAT is structured if we try and de-serialize it, it will not pick up both instances, so you need to manually parse it all and check for those scenarios.
<game name="Alien Invasion (1994)(Archimedes World)">
<description>Alien Invasion (1994)(Archimedes World)</description>
<rom name="Alien Invasion (1994)(Archimedes World).adf" .../>
</game>
<game name="Alien Invasion (1994)(Archimedes World)">
<description>Alien Invasion (1994)(Archimedes World)</description>
<rom name="Alien Invasion (1994)(Archimedes World).adf" .../>
<rom name="Alien Invasion (1994)(Archimedes World).adf" .../>
</game>
Ideally we would want to do it like this.
<game name="Alien Invasion (1994)(Archimedes World)">
<description>Alien Invasion (1994)(Archimedes World)</description>
<roms>
<rom name="Alien Invasion (1994)(Archimedes World).adf" .../>
<rom name="Alien Invasion (1994)(Archimedes World).adf" .../>
</roms>
</game>
In JSON it looks like this.
{
"name": "Acorn BBC - Applications - [BIN]",
"description": "Acorn BBC - Applications - [BIN] (TOSEC-v2013-10-16)",
"category": "TOSEC",
"version": "2013-10-16",
"author": "CRSV - Cassiel",
"email": null,
"homepage": "TOSEC",
"url": "http://www.tosecdev.org/",
"games": [
{
"name": "6502 2nd Processor BASIC Selector (1986)(Horsington, Gordon)",
"description": "6502 2nd Processor BASIC Selector (1986)(Horsington, Gordon)",
"roms": [
{
"name": "6502 2nd Processor BASIC Selector (1986)(Horsington, Gordon).bin",
"size": "999",
"crc": "aa16cca4",
"md5": "8c600bedc91d878c72ab881945d54265",
"sha1": "48cdc6079e685aadceca8347b7edc478a79eff2c"
},
{
"name": "6502 2nd Processor BASIC Selector (1986)(Horsington, Gordon).bin",
"size": "999",
"crc": "aa16cca4",
"md5": "8c600bedc91d878c72ab881945d54265",
"sha1": "48cdc6079e685aadceca8347b7edc478a79eff2c"
}
]
}
}