LINUX.ORG.RU

Модифицировать json сохраняя авторский стиль

 ,


0

1

Сабж.

При изменении существующего значения пробелы должны остаться как были.

{ "id": 101 ,
    "name"  :   "Вася"

}
->
{ "id": 101 ,
    "name"  :   "Петя"

}

При добавлении наверно должно копироваться оформление предидущего атрибута/элемента начиная от края пред-предидущего.

{ "id": 101 ,
    "name"  :   "Вася"

}
->
{ "id": 101 ,
    "name"  :   "Петя" ,
    "alias"  :   "Вася"

}

Как-то так. Готовое есть?


Очуметь запрос, зачем? И при чём отступы к жсону? Меняйте то, что его выводит, чтобы это следовало «авторскому стилю».

fernandos ★★★
()
  1. Register formatters via registerDocumentFormattingEditProvider.

  2. Implement the formatting logic per the DocumentFormattingEditProvider interface.

  3. Have a setting to enable / disable the formatter.

  4. Add the «Formatters» category to the extension manifest.

anonymous
()

Уверены, что это JSON? JSON не содержит в себе информацию о подобной разметке своих данных. Где находится приведённый вами текст, в IDE или в div какого-нибудь codemirror'а на сайте, и каким образом вы добавляете в него поля?

mydibyje ★★★★
()
Ответ на: комментарий от mydibyje

Уверены, что это JSON?

Если оно парсится как json, значит оно – json.

Где находится приведённый вами текст

В ./file.json.

каким образом вы добавляете в него поля?

Скриптом на питоне.

suuaq
() автор топика
Ответ на: комментарий от suuaq

Я к тому, что JSON не хранит в себе сложные правила форматирования (типа 5 строка имеет 3 отступа пробелами, а 6 строка 4 отступа, но табами), потому что изначально предназначен не для показа данных пользователю, максимум там можно только одновременно для всех полей объекта задать отступ (json.dumps(myobj, indent=4)) чтобы разработчику легче читалось, а не для каждого поля индивидуально. Для индивидуальной работы с каждым полем нужна дополнительная логика, да и надо где-то хранить значения отступов для каждого поля или как в вашем случае помечать поле НОВЫМ и применять к нему особое форматирование. То есть возможно придется в объект, который вы сериализуете в JSON, добавлять информацию о его (объекта) форматировании. Для вывода JSON в консоль и раскраски разным цветом существуют всякие Pygmentize и пр jq, а вот для кастомного форматирования для вывода в файл я не знаю готовых либ. Но возможно в вашем случае проще будет написать свою логику форматирования расширив класс JSONEncoder как тут в 6-ом листинге или пройтись регуляркой по строкам.

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)

Еще один способ: изменить структуру объекта, чтобы он выглядел приблизительно похоже на желамый и при этом всё также использовались стандартные средства JSON. То есть, беря ваш пример из первого поста, поля которым нужен свой отступ, засунуть в дополнительное поле titles

{
    "id": 101 ,
    "titles" : {
        "name"  :   "Вася"
    }
}
->
{
    "id": 101 ,
    "titles" : {
        "name"  :   "Вася",
        "alias"  :   "Вася"
    }
}

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 2)

Зачем готовое, полноценный парсер json пишется за день (или меньше). Реализация заодно и парсинга количества пробелов много времени не отнимет.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от mydibyje

Я к тому, что JSON не хранит в себе сложные правила форматирования

Хранит разумеется, ты что, слепой? Вот они, пробелы, в файле формата json записаны. Другое дело, что внутреннее представление этого всего js-движком действительно не содержит информацию о форматировании. Но про js-движок никто и не писал, писали про json. А json - это текстовый дамп.

firkax ★★★★★
()

Хочешь отступы - возьми YAML.

P.S. YAML легко конвертится в JSON и обратно P.P.S. Среднестатистический парсер YAML запросто сожрёт и JSON.

MumiyTroll ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.