Open
Description
The behavior as-is is very surprising! Check this out:
import "pkl:json"
hidden jsonString = """
{
"hello": "world",
"default": "greeting"
}
"""
asDynamic = new json.Parser {}.parse(jsonString)
asMapping = new json.Parser { useMapping = true }.parse(jsonString)
Result:
asDynamic {
hello = "world"
}
asMapping {
["hello"] = "world"
["default"] = "greeting"
}
I think throwing an error (or at least some kind of warning) here instead of returning unexpected results is desirable. Something like "encountered object key default
when parsing JSON, resulting Dynamic
will be incomplete or invalid" might make sense.
N.B.: Attempting to access the default yields further surprises:
asDynamicDefault = asDynamic.default
Result:
❯ pkl eval test.pkl
–– Pkl Error ––
Expected value of type `Function1`, but got type `String`.
Value: "greeting"
1741 | hidden default: (unknown) -> Any = (_) -> new Dynamic {}
^^^^^^^^^^^^^^^^
at pkl.base#Dynamic.default (https://github.com/apple/pkl/blob/0.26.0/stdlib/base.pkl#L1741)
1 |
^
at generated (source:unavailable)
11 | asDynamicDefault = asDynamic.default
^^^^^^^^^^^^^^^^^
at test#asDynamicDefault (file:///.../test.pkl, line 11)
106 | text = renderer.renderDocument(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#Module.output.text (https://github.com/apple/pkl/blob/0.26.0/stdlib/base.pkl#L106)
This similarly affects yaml.Parser.parse()
and Map.toDynamic()
.