FHIR XML to/from JSON converter library in Lua.
Online version available at https://fhir-formats.github.io.
To install FHIR-Formats, run:
$ luarocks install fhirformats
local to_json = require("fhirformats").to_json
local to_xml = require("fhirformats").to_xml
-- convert given XML content as a string to JSON
to_json("xml content")
-- convert an XML file given as a location to JSON
to_json("/path/to/file", {file = true})
-- convert XML content as a string to JSON and prettyprint it
to_json("xml content", {pretty = true})
-- convert an XML file given as a location to JSON and prettyprint it
to_json("/path/to/file", {file = true, pretty = true})
-- supported versions are 'R4', 'STU3', and 'auto' (default)
-- 'auto' will try all FHIR versions starting from R4 and going down
to_json("xml content", {fhirversion = "R4"})
to_json("xml content", {fhirversion = "STU3"})
to_json("xml content", {fhirversion = "auto"})
-- convert given JSON content as a string to XML
to_xml("json content")
-- convert an JSON file given as a location to XML
to_xml("/path/to/file", {file = true})
-- convert JSON content as a string to XML and prettyprint it
to_xml("json content", {pretty = true})
-- convert an JSON file given as a location to XML and prettyprint it
to_xml("/path/to/file", {file = true, pretty = true})
-- supported versions are 'R4', 'STU3', and 'auto' (default)
-- 'auto' will try all FHIR versions starting from R4 and going down
to_xml("json content", {fhirversion = "R4"})
to_xml("json content", {fhirversion = "STU3"})
to_xml("json content", {fhirversion = "auto"})
-- get the FHIR definition of an element. Defaults to STU3
get_fhir_definition('Patient', 'animal', 'species')
-- returns a table with metadata about the element. Do not modify this table. Keys are:
-- _min (int): minimum cardinality
-- _max (string): maximum cardinality, either a number or *
-- _type_json (string): JSON rendering type. Possible values are: number, string, boolean
-- _weight (string): arbitrary number assigned to an element - higher the number, the lower in the XML structure it is
-- _kind (string): FHIR element kind. Possible values are: complex-type, resource, primitive-type
-- _type (string): FHIR element type. Possible values are: Address, Age, Annotation, Attachment, BackboneElement, CodeableConcept, Coding, ContactDetail, ContactPoint, Contributor, Count, DataRequirement, Distance, DomainResource, Duration, Element, ElementDefinition, Extension, HumanName, Identifier, Meta, Money, Narrative, ParameterDefinition, Period, Quantity, Range, Ratio, Reference, RelatedResource, Resource, SampledData, Signature, Timing, TriggerDefinition, UsageContext, base64Binary, boolean, code, date, dateTime, decimal, id, instant, integer, markdown, oid, positiveInt, string, time, unsignedInt, uri, xhtml
-- [1]: if present, this is a link to the base type of the resource
-- _derivations: if present, this is a map of resources that extend on this resource
-- last argument can be either 'R4' or 'STU3' to specify version. Defaults to STU3
get_fhir_definition('Patient', 'contact', 'relationship', 'R4')
get_fhir_definition('Patient', 'animal', 'species', 'STU3')
> to_json = require("fhirformats").to_json
> print(to_json([[
<?xml version="1.0" encoding="UTF-8"?>
<Patient xmlns="http://hl7.org/fhir">
<id value="1"/>
<meta>
<versionId value="1"/>
<lastUpdated value="2016-04-01T03:22:46Z"/>
</meta>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<h1>Eve Everywoman</h1> </div>
</text>
<active value="true"/>
<name>
<text value="Eve Everywoman"/>
<family value="Everywoman1"/>
<given value="Eve"/>
</name>
<telecom>
<system value="phone"/>
<value value="555-555-2003"/>
<use value="work"/>
</telecom>
<gender value="female"/>
<birthDate value="1955-01-06"/>
<address>
<use value="home"/>
<line value="2222 Home Street"/>
</address>
</Patient>
]]))
{"active":true,"id":"1","text":{"status":"generated","div":"<div xmlns='http:\/\/www.w3.org\/1999\/xhtml'>\n <h1>Eve Everywoman<\/h1>\n<\/div>"},"telecom":[{"value":"555-555-2003","use":"work","system":"phone"}],"resourceType":"Patient","name":[{"family":["Everywoman1"],"text":"Eve Everywoman","given":["Eve"]}],"address":[{"line":["2222 Home Street"],"use":"home"}],"birthDate":"1955-01-06","gender":"female","meta":{"versionId":"1","lastUpdated":"2016-04-01T03:22:46Z"}}
> print(to_json([[
<?xml version="1.0" encoding="UTF-8"?>
<Patient xmlns="http://hl7.org/fhir">
<id value="1"/>
<meta>
<versionId value="1"/>
<lastUpdated value="2016-04-01T03:22:46Z"/>
</meta>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<h1>Eve Everywoman</h1> </div>
</text>
<active value="true"/>
<name>
<text value="Eve Everywoman"/>
<family value="Everywoman1"/>
<given value="Eve"/>
</name>
<telecom>
<system value="phone"/>
<value value="555-555-2003"/>
<use value="work"/>
</telecom>
<gender value="female"/>
<birthDate value="1955-01-06"/>
<address>
<use value="home"/>
<line value="2222 Home Street"/>
</address>
</Patient>
]], {pretty = true}))
{
"active": true,
"id": "1",
"text": {
"status": "generated",
"div": "<div xmlns='http:\/\/www.w3.org\/1999\/xhtml'>\n <h1>Eve Everywoman<\/h1>\n<\/div>"
},
"telecom": [
{
"value": "555-555-2003",
"use": "work",
"system": "phone"
}
],
"resourceType": "Patient",
"name": [
{
"family": [
"Everywoman1"
],
"text": "Eve Everywoman",
"given": [
"Eve"
]
}
],
"address": [
{
"line": [
"2222 Home Street"
],
"use": "home"
}
],
"birthDate": "1955-01-06",
"gender": "female",
"meta": {
"versionId": "1",
"lastUpdated": "2016-04-01T03:22:46Z"
}
}
>
Decimal precision is up to 14 significant digits.
busted --lua=$(which lua5.1) spec/
- add command-line utility for Windows, OSX, and Linux
Contibutions welcome!