xmltojson
This commit is contained in:
parent
df12bf08a1
commit
e2854788cf
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
layout: post
|
||||
title: "Converting XML to JSON in Rust"
|
||||
tags:
|
||||
- rust
|
||||
---
|
||||
|
||||
I generally default to using JSON for data interchange but there are still a
|
||||
myriad of formats of XML out there, for which I have created the
|
||||
[xmltojson](https://crates.io/crates/xmltojson) crate. I originally wrote this
|
||||
one night to help me get an XML dataset into JSON so that I could use
|
||||
[PostgreSQL's](https://postgresql.org) `JSONB` column type, but I only recently
|
||||
published it to [crates.io](https://crates.io) since it may be useful for
|
||||
others.
|
||||
|
||||
**Cargo.toml**
|
||||
```toml
|
||||
[dependencies]
|
||||
xmltojson = "0"
|
||||
```
|
||||
|
||||
|
||||
The `xmltojson` crate implements [Stefan Goessner’s xml2json](https://goessner.net/download/prj/jsonxml/) which results in a fairly straightforward conversion of XML data structure into JSON. Take the following XML for example:
|
||||
|
||||
|
||||
```xml
|
||||
<ol class="xoxo">
|
||||
<li>Subject 1
|
||||
<ol>
|
||||
<li>subpoint a</li>
|
||||
<li>subpoint b</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>
|
||||
<span>Subject 2</span>
|
||||
<ol compact="compact">
|
||||
<li>subpoint c</li>
|
||||
<li>subpoint d</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
```
|
||||
|
||||
This XML structured will be rapidly converted into the following JSON, with
|
||||
attributes and children encoded into the structure:
|
||||
|
||||
```json
|
||||
{
|
||||
"ol": {
|
||||
"@class":"xoxo",
|
||||
"li": [
|
||||
{
|
||||
"#text":"Subject 1",
|
||||
"ol":{
|
||||
"li":[
|
||||
"subpoint a",
|
||||
"subpoint b"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"span":"Subject 2",
|
||||
"ol": {
|
||||
"@compact":"compact",
|
||||
"li": [
|
||||
"subpoint c",
|
||||
"subpoint d"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
There are some oddities with the JSON encoding of XML, particularly around
|
||||
CDATA, but overall I have been quite pleased turning XML into JSON which I can
|
||||
more easily query with `jq`, PostgreSQL, or even ingest into Elasticsearch.
|
||||
|
||||
|
||||
If you happen to find any bugs, please submit pull requests [on GitHub](https://github.com/rtyler/xmltojson)
|
Loading…
Reference in New Issue