Разбор файла журнала

У меня есть файл журнала «file.log». Я попытался проанализировать файл в php, чтобы получить пару ключ-значение.

Notification: {
"state" : "PROGRESSING",
"version" : "2012-09-25",
"jobId" : "xxxxxxxxx",
"pipelineId" : "xxxxxxxxxxx",
"input" : {
"key" : "upload2/xxxxx",
"frameRate" : "auto",
"resolution" : "auto",
"aspectRatio" : "auto",
"interlaced" : "auto",
"container" : "auto"},
"outputKeyPrefix" : "output2/test4/",
"outputs" : [ {
"id" : "1",
"presetId" : "xxxxxxxxxxxx",
"key" : "xxxxxxxx",
"rotate" : "auto",
"status" : "Progressing"} ]
}

Я изменил значения. Я пытался разобрать его по этому php-коду.

<?php
$myFile = "file.log";
$lines = file($myFile);
foreach ($lines as $no => $ln) {
$out = explode(":", $ln);
echo($out[1]);
echo(trim($out[1]));
?>

Я получаю свой вывод как

{{«PROGRESSING», «PROGRESSING», «2012-09-25», «2012-09-25», «xxxxxxxxxxxx», «xxxxxxxxxx», «xxxxxxxxxxxxxxx»,

Это продолжается .. Не в нужном формате. Я хотел это как пару ключ-значение. Как это сделать? Пожалуйста, ребята, нужна помощь! Мне также нужно получить их и сохранить в базе данных, используя MySQL.

1

Решение

Обновить:

$logFile = file_get_contents('logfile.log');

// first we replace all instances of the string "Notification: " with a comma to separate the json objects
$cleanLog = str_replace("Notification: ",",",$logFile);

// next we replace the first comma
$cleanLog = '[' . ltrim($cleanLog,",") . ']';

// construct the list of object
$objects = json_decode($cleanLog);

// use this main loop to iterate over all Notification rows
foreach ($objects as $object){
// write a mysql insert statement here,
// you can address each object and inner members as follows:

print $object->state . PHP_EOL;
print $object->outputKeyPrefix . PHP_EOL;
print $object->outputs[0]->id . PHP_EOL;
print $object->input->key . PHP_EOL;
}

используя этот пример файла журнала в качестве ссылки:

logfile.log

Notification: {
"state" : "PROGRESSING",
"version" : "2012-09-25",
"jobId" : "xxxxxxxxx",
"pipelineId" : "xxxxxxxxxxx",
"input" : {
"key" : "upload2/xxxxx",
"frameRate" : "auto",
"resolution" : "auto",
"aspectRatio" : "auto",
"interlaced" : "auto",
"container" : "auto"},
"outputKeyPrefix" : "output2/test4/",
"outputs" : [ {
"id" : "1",
"presetId" : "xxxxxxxxxxxx",
"key" : "xxxxxxxx",
"rotate" : "auto",
"status" : "Progressing"} ]
}
Notification: {
"state" : "PROGRESSING",
"version" : "2012-09-25",
"jobId" : "xxxxxxxxx",
"pipelineId" : "xxxxxxxxxxx",
"input" : {
"key" : "upload2/xxxxx",
"frameRate" : "auto",
"resolution" : "auto",
"aspectRatio" : "auto",
"interlaced" : "auto",
"container" : "auto"},
"outputKeyPrefix" : "output2/test4/",
"outputs" : [ {
"id" : "1",
"presetId" : "xxxxxxxxxxxx",
"key" : "xxxxxxxx",
"rotate" : "auto",
"status" : "Progressing"} ]
}
Notification: {
"state" : "PROGRESSING",
"version" : "2012-09-25",
"jobId" : "xxxxxxxxx",
"pipelineId" : "xxxxxxxxxxx",
"input" : {
"key" : "upload2/xxxxx",
"frameRate" : "auto",
"resolution" : "auto",
"aspectRatio" : "auto",
"interlaced" : "auto",
"container" : "auto"},
"outputKeyPrefix" : "output2/test4/",
"outputs" : [ {
"id" : "1",
"presetId" : "xxxxxxxxxxxx",
"key" : "xxxxxxxx",
"rotate" : "auto",
"status" : "Progressing"} ]
}

Строка после бита «Уведомление:» действительна json, Вы можете разобрать это следующим образом:

<?php

$string = '{
"state" : "PROGRESSING",
"version" : "2012-09-25",
"jobId" : "xxxxxxxxx",
"pipelineId" : "xxxxxxxxxxx",
"input" : {
"key" : "upload2/xxxxx",
"frameRate" : "auto",
"resolution" : "auto",
"aspectRatio" : "auto",
"interlaced" : "auto",
"container" : "auto"},
"outputKeyPrefix" : "output2/test4/",
"outputs" : [ {
"id" : "1",
"presetId" : "xxxxxxxxxxxx",
"key" : "xxxxxxxx",
"rotate" : "auto",
"status" : "Progressing"} ]
}';

// construct object
$object = json_decode($string);

// call each property of the object or inner object

print $object->state . PHP_EOL;
// PROGRESSING

print $object->outputKeyPrefix . PHP_EOL;
// output2/test4/

print $object->outputs[0]->id . PHP_EOL;
// 1

// or, for multiple outputs

foreach ($object->outputs as $output)
print $output->rotate . PHP_EOL;
// auto
2

Другие решения

Попробуй это:

$myFile = "file.log";
$str = file_get_contents($myFile);
$json = trim(strstr($str, ':'), ': ');
print_r(json_decode($json));// for Object
print_r(json_decode($json, true));// for Array

На самом деле «Уведомление» предотвращает чтение строки как JSON. В качестве действительного JSON должен начинаться с фигурных или квадратных скобок,
сначала мы удаляем «Уведомление», а затем обрезаем лишние пробелы или двойное двоеточие с обеих сторон строки. Таким образом, остается только действительный JSON.

0

Не имеет значения, если ваша строка JSON не находится в файле JSON .. вы можете проанализировать его как

<?php
$myFile = "file.log";
$json = file_get_contents($myFile);
$json= explode(":",$json,2);
$json=$json[1];
$obj=json_decode($json,true);
print_r($obj);

?>
0
По вопросам рекламы [email protected]