Не вставляйте боевые .env с паролями и токенами: файл уходит на сервер для разбора.
В отдельный ключ @attributes рядом с содержимым элемента. Например,
<price currency="RUB">100</price> при переводе в JSON станет
{"@attributes":{"currency":"RUB"},"@value":"100"} — иначе атрибуты и текст
элемента было бы просто некуда деть одновременно в одном значении. Маркер работает только
в эту сторону: если оставить ключ @attributes в самом JSON и перевести его в
XML, инструмент воспримет его как обычный ключ и получит служебный тег вида
<_attributes key="@attributes">, а не настоящие атрибуты элемента —
их для XML нужно расставлять вручную.
Пять ограничений, проверенных напрямую замером, а не предположением:
5432 и true превращаются в "5432" и
"true";null и пустая строка после круга неразличимы — оба возвращаются как
"";{} и [] неразличимы уже на этапе разбора самого JSON,
поэтому оба возвращаются как пустой массив [];<a>текст1<b>x</b>текст2</a> — теряет весь текст,
остаются только вложенные теги: {"a":{"b":"x"}};<a> отступ </a>
становится {"a":"отступ"}.Если внутри одного родителя несколько раз встречается тег с одинаковым именем, при чтении назад в JSON они превращаются в массив по этому ключу. Тег, встреченный один раз, остаётся одиночным значением, а не массивом из одного элемента — граница между «один» и «список из одного» в самом XML не выражена, и конвертер её не выдумывает.
DOCTYPE в XML позволяет объявлять внешние сущности и через них подставлять содержимое произвольных файлов сервера — атака XXE. Инструмент отклоняет любой XML с DOCTYPE ещё до разбора документа, независимо от того, что в объявлении на самом деле написано.
Если ключ можно превратить в валидное имя заменой недопустимых символов на подчёркивание,
элемент получает такое имя, а исходный ключ сохраняется в атрибуте key. Если
и это не подходит (например, ключ — число или начинается с цифры), элемент называется
item, а исходный ключ хранится в атрибуте key (для строк) или
index (для чисел, включая исходные индексы разреженных списков) — значение не
теряется, даже если подходящее имя тега подобрать не удалось.
В отдельный ключ @attributes рядом с содержимым элемента. Например, <price currency="RUB">100</price> при переводе в JSON становится {"@attributes":{"currency":"RUB"},"@value":"100"} — иначе атрибуты и текст элемента было бы просто некуда деть одновременно.
Нет: маркер @attributes распознаётся только при чтении XML → JSON. Если оставить ключ @attributes в самом JSON и сконвертировать его в XML, инструмент воспримет его как обычный ключ и получит служебный тег вида <_attributes key="@attributes">, а не атрибуты элемента. Чтобы получить настоящие XML-атрибуты, их нужно расставлять вручную в уже готовом XML.
Пять вещей, проверенных напрямую: значения после круга становятся строками, потому что XML не хранит типы — 5432 и true превращаются в "5432" и "true"; null и пустая строка после круга неразличимы — оба возвращаются как ""; {} и [] неразличимы уже на этапе разбора самого JSON, поэтому оба возвращаются как пустой массив []; смешанное содержимое тега (текст вперемешку с вложенными тегами, например <a>текст1<b>x</b>текст2</a>) теряет весь текст — остаются только вложенные теги; и значимые пробелы по краям текста обрезаются — " отступ " превращается в "отступ".
Если внутри одного родителя несколько раз встречается тег с одинаковым именем, при чтении назад в JSON они превращаются в массив по этому ключу. Тег, встреченный один раз, остаётся одиночным значением, а не массивом из одного элемента — эту границу в самом XML нечем выразить, и инструмент её не выдумывает.
DOCTYPE в XML позволяет объявлять внешние сущности и через них подставлять содержимое произвольных файлов сервера — атака XXE. Инструмент отклоняет любой XML с DOCTYPE ещё до разбора документа, независимо от того, что в объявлении на самом деле написано.
Если ключ можно превратить в валидное имя заменой недопустимых символов на подчёркивание, элемент получает такое имя, а исходный ключ сохраняется в атрибуте key. Если и это не подходит (например, ключ — число или начинается с цифры), элемент называется item, а исходный ключ хранится в атрибуте key (для строк) или index (для чисел, включая исходные индексы разреженных списков).
JSON ⟷ PHP-массив, универсальный конвертер конфигов (JSON, YAML, .env, PHP-массив, XML, CSV), JSON ⟷ YAML, CSV ⟷ JSON, а также остальные инструменты.
Опишите задачу — отвечу и предложу формат работы.
Обсудить задачу