mirror of
https://github.com/lightbend/config.git
synced 2025-03-25 08:40:40 +08:00
Discuss conversion of objects to arrays in the spec
This commit is contained in:
parent
ed7c97d06c
commit
61675293f7
42
HOCON.md
42
HOCON.md
@ -1073,6 +1073,43 @@ Implementations need not support files, Java resources, or URLs;
|
||||
and they need not support particular URL protocols. However, if
|
||||
they do support them they should do so as described above.
|
||||
|
||||
### Conversion of numerically-indexed objects to arrays
|
||||
|
||||
In some file formats and contexts, such as Java properties files,
|
||||
there isn't a good way to define arrays. To provide some mechanism
|
||||
for this, implementations should support converting objects with
|
||||
numeric keys into arrays. For example, this object:
|
||||
|
||||
{ "0" : "a", "1" : "b" }
|
||||
|
||||
could be treated as:
|
||||
|
||||
[ "a", "b" ]
|
||||
|
||||
This allows creating an array in a properties file like this:
|
||||
|
||||
foo.0 = "a"
|
||||
foo.1 = "b"
|
||||
|
||||
The details:
|
||||
|
||||
- the conversion should be done lazily when required to avoid
|
||||
a type error, NOT eagerly anytime an object has numeric
|
||||
keys.
|
||||
- the conversion should be done when you would do an automatic
|
||||
type conversion (see the section "Automatic type conversions"
|
||||
below).
|
||||
- the conversion should be done in a concatenation when a list
|
||||
is expected and an object with numeric keys is found.
|
||||
- the conversion should not occur if the object is empty or
|
||||
has no keys which parse as positive integers.
|
||||
- the conversion should ignore any keys which do not parse
|
||||
as positive integers.
|
||||
- the conversion should sort by the integer value of each
|
||||
key and then build the array; if the integer keys are "0" and
|
||||
"2" then the resulting array would have indices "0" and "1",
|
||||
i.e. missing indices in the object are eliminated.
|
||||
|
||||
## API Recommendations
|
||||
|
||||
Implementations of HOCON ideally follow certain conventions and
|
||||
@ -1095,6 +1132,8 @@ implementation should attempt to convert types as follows:
|
||||
- string to null: the string `"null"` should be converted to a
|
||||
null value if the application specifically asks for a null
|
||||
value, though there's probably no reason an app would do this.
|
||||
- numerically-indexed object to array: see the section
|
||||
"Conversion of numerically-indexed objects to arrays" above
|
||||
|
||||
The following type conversions should NOT be performed:
|
||||
|
||||
@ -1103,7 +1142,8 @@ The following type conversions should NOT be performed:
|
||||
- object to anything
|
||||
- array to anything
|
||||
- anything to object
|
||||
- anything to array
|
||||
- anything to array, with the exception of numerically-indexed
|
||||
object to array
|
||||
|
||||
Converting objects and arrays to and from strings is tempting, but
|
||||
in practical situations raises thorny issues of quoting and
|
||||
|
Loading…
Reference in New Issue
Block a user