Регулярно нужно в интерфейсе посмотреть JSON. Обычно для этого используется текстовое поле, но у этого способа два недостатка:
- Нет встроенного форматирования. Нужно его предварительно выполнить
- Нет раскраски - в итоге данные неудобно просматривать
Для решения этого вопроса с помощью deepseek создал простой макет страницы с встроенными стилями и Javascript для раскраски
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSON Formatter</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f5f5f5;
}
.json-container {
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.json-key {
color: #881391;
}
.json-string {
color: #c41a16;
}
.json-number {
color: #1c00cf;
}
.json-boolean {
color: #0d22aa;
}
.json-null {
color: #808080;
}
</style>
</head>
<body>
<div class="json-container">
<pre id="json-output"></pre>
</div>
<script>
const jsonData = %1;
// Функция для раскрашивания JSON
function syntaxHighlight(json) {
if (typeof json !== 'string') {
json = JSON.stringify(json, null, 2);
}
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,
function (match) {
let cls = 'json-number';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'json-key';
} else {
cls = 'json-string';
}
} else if (/true|false/.test(match)) {
cls = 'json-boolean';
} else if (/null/.test(match)) {
cls = 'json-null';
}
return '<span class="' + cls + '">' + match + '</span>';
}
);
}
// Вывод раскрашенного JSON
document.getElementById('json-output').innerHTML = syntaxHighlight(jsonData);
</script>
</body>
</html>
На форме 2 текстовых поля:
- ДанныеJSON - поле для исходного JSON
- ПолеПросмотра - поле для отображения HTML документа
И добавил обработчики на форму
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ДанныеJSON", ДанныеJSON) Тогда
Элементы.ДанныеJSON.Видимость = Ложь;
КонецЕсли;
ЗаполнитьПолеПросмотра();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДанныеJSONПриИзменении(Элемент)
ЗаполнитьПолеПросмотра();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьПолеПросмотра()
ПолеПросмотра = СтрШаблон(
РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетHTML").ПолучитьТекст(),
ДанныеJSON);
КонецПроцедуры
#КонецОбласти
Обработку можно использовать двумя способами:
- Простое открытие - в этом случае после изменения текста в поле ДанныеJSON - отрабатывает обработчик события ПриИзменении и отображается превью
- Открытие по команде с передачей ДанныеJSON - в этом случае поле ДанныеJSON скрывается и происходит просто отображение отформатированного и раскрашенного JSON
Код обработчика
#Область ОбработчикиСобытий
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ДанныеJSON = "{}"; // <- сюда передаём данные для отображения
ОткрытьФорму("Обработка.ПросмотрJSON.Форма", Новый Структура("ДанныеJSON", ДанныеJSON));
КонецПроцедуры
#КонецОбласти
Обработка универсальная, будет работать на любых конфигурациях на управляемых формах.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.1.91
Вступайте в нашу телеграмм-группу Инфостарт