Encode/Decode EDN in PHP
A tool to encode/decode between EDN and
PHP data structures., (*1)
Note
When converting from EDN to PHP the conversion is lossy as the richness of
datatypes supported by EDN is not available in PHP. So a conversion from
EDN to PHP and back to EDN would not lose you data, but it would lose type
information., (*2)
Usage
The interface is via some static functions on the Edhen class. To decode an
EDN element..., (*3)
$element = Edhen::decode('(1 :foo [2])');
// array(1, ':foo', array(2))
If you have EDN with multiple elements, you can use decodeAll, (*4)
$elements = Edhen::decodeAll(':foo :bar :baz');
// array(':foo', ':bar', ':baz')
Then for encoding use the encode function, passing it the data to encode..., (*5)
$ednString = Edhen::encode(array(1, 2));
// '[1 2]'
Data Type Translations
When decoding EDN to PHP..., (*6)
| EDN |
PHP |
| nil |
null |
| true |
true |
| false |
false |
| strings |
string |
| characters |
string |
| symbols |
string |
| keywords |
string |
| integer |
integer |
| floating-point |
double |
| lists |
array |
| vectors |
array |
| maps |
array |
| sets |
array |
| EDN |
PHP |
| inst |
DateTime |
| uuid |
string |
When encoding PHP to EDN..., (*7)
| PHP |
EDN |
| null |
nil |
| boolean |
boolean |
| integer |
integer |
| double |
float |
| array |
vector |
| array (assoc) |
hashmap |
| object |
hashmap |
| resource |
nil |
| callable |
nil |
The decision on if an array is to be converted to a vector or hashmap is done by
checking its keys. If any of the keys are non-numeric then a hashmap is used., (*8)
EDN is generated as a single string, no pretty-printing is currently supported.
Another tool should be used for this., (*9)
Custom Tag Handlers
To implement your own tag handlers,
create a class which implements the Edhen\TagHandler
interface and pass it in an array as the second argument to decode/decodeAll, (*10)
$myHandler = new MyCustomTagHandler();
$element = Edhen::decode($edn, array($myHandler));
You can see an example in the tests., (*11)
Installation
Edhen can be installed via Composer., (*12)