Has anyone implemented the import of YAML data files into Mathematica? I suppose some sort of transformation into a nested list of rules would be the way to do it. Thanks
Asked
Active
Viewed 1,220 times
12
-
There are many YAML parsers for Java, and Mathematica has J/Link. It should be possible to use those two together. – Gustavo Delfino Sep 30 '14 at 12:46
3 Answers
6
I wrote such a cross-platform tool to convert other formats to wolfram format: WolframExchange
Usage
wex in.yml # check file but no output
wex in.yml -t # output only text
wex in.yml -c # output only binary
wex in.yml -ct # output both text and binary
Result
Aster
- 3,836
- 1
- 18
- 44
5
I just wrote an importer: https://github.com/zbjornson/MYaml. It's built on SnakeYAML and supports all language-independent types.
Example 2.10 from the spec:
In[1]:= ImportString["---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey", "YAML"]
Out[1]= {
"hr" -> {"Mark McGwire", "Sammy Sosa"},
"rbi" -> {"Sammy Sosa", "Ken Griffey"}
}
More examples in the test suite.
ZachB
- 1,200
- 9
- 19
-
2For demonstration purposes, can you show how your importer acts on a sample YAML file? – J. M.'s missing motivation Oct 12 '16 at 03:21
-
-
1
-
Another importer was written just a few days ago, see at the end of comment thread here: http://mathematica.stackexchange.com/q/127300/12 – Szabolcs Oct 12 '16 at 06:43
-
-
I got a successful "Installed YAML importer to..." and restarted the kernel, but if I try to use it with
ImportorImportStringI get the error "The Import element "YAML" is not present when importing as Text". I believe this is because it's not recognizing the"YAML"as a data format and is falling back and assuming it's a specified element of the data. Anyway to troubleshoot this? – Jess Riedel Sep 05 '18 at 23:49 -
1@JessRiedel You're correct. I'm not on a computer with M right now but can double check in the morning that a fresh install works. What version of M are you using? You can try manually loading this file to register the importer, something like
<< FileNameJoin[{$BaseDirectory, "SystemFiles", "Formats", "YAML", "Import.m"}]. – ZachB Sep 06 '18 at 02:21 -
Gah, it turns out I just needed to use
$UserBaseDirectoryinstead of$BaseDirectory. The folder at$BaseDirectorydoesn't actually exist on my machine, and the installation code fails silently in this case (which is totally reasonable given the audience size; I should have just checked things more carefully). Thanks much for your fast help. – Jess Riedel Sep 06 '18 at 02:48 -
Thanks for reporting back. I'll try to make it print a helpful error in that situation. – ZachB Sep 06 '18 at 03:59

