XML vs YAML vs JSON

27,709

Solution 1

We can't really answer that without knowing a lot more. Just because you're not currently dependent on any other projects, are you likely to interact with them at some point in the future? If so, what technologies do they prefer? At the BBC, we've had some projects "JSON-only", only to find out that Java developers who wanted to access our API were begging us to provide a simple XML API simply because they have so many tool built around XML. They didn't even care about namespaces, attributes, or anything else; they just wanted those angle-brackets.

As for "storing feeds", I also not sure what you mean there. You explain the data in the feed, but what are you then going to do with those feeds? Parse them? Cache and reserve them? Write them out to cuneiform tablets? :)

I sounds like what you actually want is a database and you want to persist the data there and later make it serialisable as JSON/YAML/XML or whatever your desired format is. What I'd recommend is to be able to pull the data out into a Perl data structure and then have "formatters" which know how to serialise that data structure to the desired output. That way you can serialise to, say, JSON, and later if that's not good enough, easily switch to YAML or something else. In fact, if others need your data (one-way data tends not to be useful), they can ask for JSON, YAML, XML or whatever. You have more flexibility and aren't tied into a decision that you made up front.

That being said, I don't know your system, so it's tough to say what the right thing to do is. Also, not that JSON and YAML aren't exactly interchangeable with XML. Subtle differences can and will trip you up.

Solution 2

Each will do the job.

JSON has the advantage of super-easy parsing in JavaScript, though you'll probably have to find and introduce a library in other languages.

XML has the advantage that more languages bundle the relevant libraries, and is useful for the storage you mention. So, it is valuable for passing around through different systems, both "in-motion" and "at-rest".

YAML has libraries for all languages, but is somewhat less commonly used, so you are more likely to have to find and introduce a library.

Solution 3

I think XML has been thoroughly explained by the others. However, YAML and JSON are both elegant languages, and they are not as similar as you might believe at first glance.

Some of the particularities about YAML

  • References

    - person: &id002
        name:   James
        age:    5.0
    
    - person: *id001
    

    The second person is an associative array equal to the first.

  • Casting data types

    foobar: !!str 123
    

    foobar is "123" (type string).

  • Uncommon data types not supported by every implementation

    Wikipedia:

    Particularly interesting ones [...] are sets, ordered maps, timestamps, and hexadecimal.

Therefore, I consider JSON a lot simpler.

An argument for JSON

Not just for JavaScript

While it might seem stupid to use the "JavaScript Object Notation" for your application if you don't use JavaScript, you should really consider it anyway, because the data types offered in JSON are probably the most common ones in your language too.

Readable, even if the whitespace is optional

I think JSON is very readable once prettified, which is very easy to do. YAML is difficult to make compact, since it relies on the whitespace. Granted, you should rely on compression for saving bandwidth. The references in YAML might save you a few bytes, but they add a lot of complexity. If you are really dealing with amounts of data that makes it important to avoid duplication, I'd suggest solving that problem on a whole other level. Not even XML supports these kind of macros.

Solution 4

Choose XML if you need to interoperate with systems you don't control (XML Schema is invaluable here), if you will be transforming the data extensively into text, HTML, or XML (haters notwithstanding, XSLT is peerless), if your data includes a lot of text markup, if your data needs to be human-editable (haters notwithstanding, editable XML that's validated against a schema is a pretty good tool for a lot of jobs), and/or if you need to interoperate any of the myriad of tools and technologies that work with XML.

Choose JSON if you really can't be bothered with any of the above.

Choose YAML if you're working in an environment that's got a lot of YAML support.

Solution 5

I agree with Joe. For example, if it's a javascript app; json would be a strong candidate. Personally, I'd go with json for just about anything but only because that is the one I'm most comfortable with.

Share:
27,709
snoofkin
Author by

snoofkin

Developer...............C/C++.......Perl.......XSLT......Bash.......etc.... Concentrating mainly on Perl & C++ and Qt.

Updated on November 05, 2020

Comments

  • snoofkin
    snoofkin over 3 years

    Assuming I'm starting a project from scratch, which is not dependent on any other project. I would like to use a format to store feeds, something like XML, since XML is not the only available format of its kind, I would like to know: why should I choose one over the rest?

    I will be using perl.

    'Feed' is a description of a product (name, price, type, short description, up to 120 words).

  • Joe
    Joe over 13 years
    agreed - I avoid xml until forced to use it. key balue pairs work just fine for most usages.
  • Ether
    Ether over 13 years
    XML is almost always overkill. :)
  • user1316401
    user1316401 over 13 years
    YAML: YAML Ain't (lightweight) Markup Language
  • Jimmy
    Jimmy over 13 years
    XML is like violence: if it doesn't solve your problem, you aren't using enough of it.
  • Tom Anderson
    Tom Anderson over 13 years
    You'll have to introduce libraries for either of YAML or JSON in any language, i think. But Perl's YAML libraries are good - YAML came out of the Perl world.
  • Alan H.
    Alan H. over 12 years
    @tsee The more I learn about YAML, the more you would seem to be correct.
  • Jacob
    Jacob over 12 years
    YAML looks deceptively simple. You have to realize that most JSON files are also valid YAML files.