#javascript #visual-studio-code #bdd
Вопрос:
Я пытаюсь получить журнал сообщений из Azure application Insight следующим образом
az monitor app-insights --app [app id] --analystics-query [condition like specific message id]
Затем я получил такое сообщение
«сообщение»: [ «Получение сообщения: {«type»:»CTL»,»traceId»:»f0d11b3dbf27b8fc57ac0e40c4ed9e48″,»spanId»:»a5508acb0926fb1a»,»id»:{«global»:»GLkELDUjcRpP4srUt9yngY»,»caller»:null,»local»:»GLkELDUisjnGrSK5wKybht»},»eventVersion»:»версия формата»,»метка времени»:»2021-10-01T14:55:59.8168722 07:00″,»eventMetadata»:{«deleteTimeStamp»:null,»ttlSeconds»:null,»isFcra»:null,»isDppa»:true,»isCCPA»:true,»globalProductId»:null,»globalSubProductId»:null,»mbsiProductId»:null},»eventBody»:{«sys»:»otel»,»msg»:»тестирование централизованное событие издателю приложения app1 (с помощью Logback так)»,»приложение»:{«имя»:»Отель»,»Сервис»:»к»,»информация»:»информация именем»,»метод»:»POST», что»протоколом»: на»HTTP»,»resp_time_ms»:»250″,»status_code»:»4″},}}»
] }
Так что я хотел бы применить регулярное выражение для этого сообщения, чтобы получить только сообщение от {"type.....
до "status_code":"4"},}}
, а также преобразовать его в формат JSON
У меня есть такой код в моем файле .js
Then('extract json from {string}', function(message){
message = getVal(message, this);
const getmess = message.match(/{(.*)}/g);
const messJson = JSON.parse(getmess);
console.log(messJson);
})
Но у меня это не работает
Синтаксическая ошибка: Неожиданный токен в JSON в позиции 1
Как я могу применить это в своем коде на Javascript? Большое вам спасибо за вашу помощь
Комментарии:
1. Привет, я. Не могли бы вы, пожалуйста, объяснить, почему вы хотели бы получать только сообщение от «{«type…..to «status_code»:»4″},}}»? Если вы планируете получить код статуса, не можете ли вы получить все сообщение целиком и вместо этого указать все сообщение как его подмножество?
2. @JeromeJosephraj, потому что я просто хочу взять только json объекта из этого, не включая другую букву
3. Привет Кайт — Тебе обязательно? Сравнивая весь объект, вы сравниваете не только объект состояния, но и все сообщение. Этот способ сравнения имеет дополнительное преимущество в проверке всех объектов в json, поэтому, если что-то еще изменилось, это также будет выделено. Если проверить только объект состояния, сценарий может пройти, но в сообщении может содержаться неправильное сообщение в другом месте
Ответ №1:
Попробуй это. Но имейте в виду, что текущее регулярное выражение связано с предоставленным синтаксисом вывода программы. Если выходные данные будут отличаться по структуре оболочки, это регулярное выражение может больше не работать.
// Text from app
const STDOUT = `
"message": [ "Receiving message: {"type":"CTL","traceId":"f0d11b3dbf27b8fc57ac0e40c4ed9e48","spanId":"a5508acb0926fb1a","id":{"global":"GLkELDUjcRpP4srUt9yngY","caller":null,"local":"GLkELDUisjnGrSK5wKybht"},"eventVersion":"format version","timeStamp":"2021-10-01T14:55:59.8168722 07:00","eventMetadata":{"deleteTimeStamp":null,"ttlSeconds":null,"isFcra":null,"isDppa":true,"isCCPA":true,"globalProductId":null,"globalSubProductId":null,"mbsiProductId":null},"eventBody":{"sys":"otel","msg":"Testing Centralized Event Publisher with App1 (using logback)","app":{"name":"otel","service":"postHouse","status":"status name","method":"POST","protocol":"HTTP","resp_time_ms":"250","status_code":"4"},}}"
] }
`;
// Match JSON part string
let JSONstr = /.*[s*"Receiving message:s*(.*?)s*"s*]s*}s*$/.exec(STDOUT)[1];
// Remove trailing comma(s)
JSONstr = JSONstr.replace(/^(.*")([^"] )$/, (s, m1, m2) => `${m1}${m2.replace(/,/, "")}`);
// Convert to object
const JSONobj = JSON.parse(JSONstr);
// Result
console.log(JSONobj);
Ответ №2:
Попробуй вот это:
/.*?({"type":.*?,"status_code":"d "})/
При использовании в Javascript часть, заключенная в круглые скобки, считается группой 1, т. е.,:
const messJson = JSON.parse(message.match(/.*?({"type":.*?,"status_code":"d "})/)[1]);
Ссылка здесь: https://regexr.com/66mf2
Комментарии:
1. Это шоу для меня ничего не значит
2. Если он равен нулю, это означает, что совпадения еще не было. Всегда ли конечный бит журналов соответствует? то есть, это всегда заканчивается
status_code
?