Example:
version 1.0
workflow wf {
input {
Map[String, Array[String]] input_stats = {
"stat1": ["1", "2", "3"],
"stat2": ["D", "E", "F"]
}
}
call t {
input:
stats = input_stats
}
output {
File out = t.out
}
}
task t {
input {
Map[String, Array[String]] stats
}
command <<<
cat "~{write_json(stats)}"
>>>
output {
File out = stdout()
}
}
Expected output:
{"stat1": ["1", "2", "3"], "stat2": ["D", "E", "F"]}
In miniwdl, write_json()
converts Map[String, Array[String]]
into an object, as expected and defined in the 1.0 spec.
Actual output:
[{"left":"stat1","right":["1","2","3"]},{"left":"stat2","right":["D","E","F"]}]
Cromwell (v90) seems to be storing or converting the Map[String, Array[String]]
as Array[Pair[String, Array[String]]]
, and write_json()
converts it into an array of objects.
Simpler structures like Map[String, String]
seem to behave as expected in Cromwell.