#json #linux
#json #linux
Вопрос:
У меня есть файл JSON, который размещен на сервере Linux. Я хочу удалить объект partcualr со второй позиции и далее. Проблемы:-
- Корневой элемент сохраняет его, и тот же объект, который повторяется в файле JSON, должен быть удален.
- как добавить квадратные скобки в данные JSON
Я устал sed
и awk
командовать, но безуспешно
sed '/"audit"/,/}/ d; /^$/d' sample_request.json >> test.json
— Это было удаление всего объекта вместо определенного слова.
аудит — Удалите этот объект в файле json со второй позиции в wards. [] — Это поле, которое необходимо добавить к файлу, который отображается как исключенный вывод
Актуально :-
{
"audit" : {
"audit number" : "123",
"amount" : {
"Amount" : -10.0,
"code" : "abc"
},
"over" : 1
},
"audit" : {
"audit number" : "234",
"amount" : {
"Amount" : 290.0,
"code" : "xyz"
},
"over" : 5
},
"audit" : {
"audit number" : "235",
"amount" : {
"Amount" : 270.0,
"code" : "kdb"
},
"over" : 6
},
"id" : "test",
"eid" : "1",
"bcode" : "123",
"wid" : "1234",
"wsid" : "11",
"ss" : 2
}
Исключенный вывод, как показано ниже:
{
"audit" :[{
"audit number" : "123",
"amount" : {
"Amount" : -10.0,
"code" : "abc"
},
"over" : 1
},
{
"audit number" : "234",
"amount" : {
"Amount" : 290.0,
"code" : "xyz"
},
"over" : 5
},
{
"audit number" : "235",
"amount" : {
"Amount" : 270.0,
"code" : "kdb"
},
"over" : 6
},
]
"id" : "test",
"eid" : "1",
"bcode" : "123",
"wid" : "1234",
"wsid" : "11",
"ss" : 2
}
Комментарии:
1. Привет, забыл о формате json, Возможно ли удалить тег аудита с помощью sed или awk commond в Linux, если да, пожалуйста, поделитесь полной командой, чтобы попробовать с моей стороны.
2. Взгляните на jq . Попытка обработать JSON с помощью sed или awk — это просто плохой подход с самого начала.
3. @oguzismail если единственной ошибкой является повторяющееся свойство, то это действительно касается afa
jq --stream
.4. @oguzismail Я только сейчас понял это — входные данные на самом деле являются допустимым JSON. Сначала я подумал, что для корневого объекта не было закрытия
}
, но он был просто смещен. Помните, что ключи в объекте JSON не обязательно должны быть уникальными, они просто ДОЛЖНЫ (раздел 2.2).5. Тем не менее, любой, кто использует неуникальные ключи в объектах JSON, должен, по крайней мере, переосмыслить то, что они делают.
Ответ №1:
В sed вы можете сделать что-то вроде:
sed -e '1,/audit number/s#audit".*#audit" : [{#'
-e '/audit number/,$s#"audit"s*:##'
-e '{N;s#,s*"id"#]amp;#;P;D}' input.txt
что примерно переводится как:
- между строками 1 и первым «номером аудита» замените A на поля аудита.
- между первым «номером аудита» и концом замените B на поля аудита.
- используйте объединение строк, чтобы найти [пробелы] «id» и вставить ‘]’ перед ним.
Работа с JSON с помощью инструментов string очень опасна, поскольку изменения в интервалах и порядке, которые не имеют значения между программами, обменивающимися JSON, испортят этот стиль синтаксического анализа. Обычно лучше выполнить минимальное количество исправлений, чтобы получить действительный JSON, а затем использовать обычные средства JSON на любимом языке программирования.