Синтаксис многоуровневой таблицы TOML внутри массива недопустим или нет

Я вижу ошибку во время синтаксического анализа с помощью парсеров Python и JS. Кажется, я не могу найти пример в репозитории TOML о том, следует ли это принимать или нет:

[[somearray]]
one.two = false # fails, '.' not allowed in key

Я знаю, что могу выразить это так:

[[somearray]]
   [somearray.one]
   two = false # OK

Файл readme TOML предлагает этот пример (среди прочего):

[fruit]
apple.color = "red"
apple.taste.sweet = true

который не включает массивы, но, кажется, узаконивает этот синтаксис.

Я также наблюдаю, что обычный файл с таким содержимым:

apple.color = "red"

отвергается. В заключение, пока вы не войдете в «режим таблицы» (так сказать) с реальной таблицей в квадратных скобках, ключи могут быть только одиночными.

Теперь снова, в TOML readme говорится (хотя и в разделе таблиц):

"Ключи с точками определяют все слева от каждой точки как таблицу."

Очевидно, что если основные синтаксические анализаторы задыхаются от него, использовать его не очень хорошая идея, но я хотел бы понять, если и почему это известное нет-нет. Есть ли здесь какая-то двусмысленность, которую я не вижу?


person Álex    schedule 07.04.2020    source источник


Ответы (2)


Эти случаи подтверждены действительным TOML в соответствии со спецификацией 1.0, которая добавляет много других примеров: https://github.com/toml-lang/toml/blob/1.0.0/toml.md

person Álex    schedule 04.02.2021

Следующий синтаксис, безусловно, допустим для Toml:

[[somearray]]
one.two = false

В результате должна получиться модель, эквивалентная этому синтаксису Json:

{
    "somearray": [
        {
            "one": {
                "two": false
            }
        }
    ]
}

Это можно проверить здесь.

Ключи с точками действительно должны определять все слева от каждой точки как таблицу.

person alex-dl    schedule 02.02.2021