Управление журналом с несколькими массивами в json_encode - PullRequest
0 голосов
/ 21 октября 2019

Я искал несколько дней, прочитал несколько тем и не нашел ответа.

Вот моя проблема: я переделываю управление журналами на CodeIgniter 3.XX.

Я собираю данные для каждого сообщения журнала в массив следующим образом:

$log_message['date'] = $date
$log_message['severity'] = $severity
$log_message['message'] = $message

и т. Д. И т. Д. Нет проблем собрать данные из каждого сообщения журнала и поместить их в массив.

Проблема в том, что я хочу json кодировать данные и декодировать их в другом контроллере, чтобы отобразить их на приборной панели.

, поэтому я использую $log_message = json_encode($log_message, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

Вот результат:

{
    "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
    "level": "ERROR",
    "date": "2019-10-21 16:53:24",
    "short_message": "Users.php 2055",
    "severity": "Compile",
    "ip": "",
    "trace": [
        "core/Common.php MY_Exceptions->log_exception() (line:618)"
    ],
    "short_trace": "core/Common.php MY_Exceptions->log_exception() (line:618)",
    "uri": "[POST] /api/users/user"
}


и после нескольких сообщений я получил это:

{
    "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
    "level": "ERROR",
    "date": "2019-10-21 16:53:24",
    "short_message": "Users.php 2055",
    "severity": "Compile",
    "ip": "",
    "trace": [
        "core/Common.php MY_Exceptions->log_exception() (line:618)"
    ],
    "short_trace": "core/Common.php MY_Exceptions->log_exception() (line:618)",
    "uri": "[POST] /api/users/user"
}{
    "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
    "level": "ERROR",
    "date": "2019-10-21 16:53:24",
    "short_message": "Users.php 2055",
    "severity": "Compile",
    "ip": "",
    "trace": [
        "core/Common.php MY_Exceptions->log_exception() (line:618)"
    ],
    "short_trace": "core/Common.php MY_Exceptions->log_exception() (line:618)",
    "uri": "[POST] /api/users/user"
}

Но когда я хочу json_decode мой файл, он не рассматривается как массив json, поэтому я добавил "," между каждым сообщениемчтобы разделить их, но мне нужно найти способ написать «[» в начале и «]» в конце, зная, что файл увеличивается новыми сообщениями журнала. Вы знаете способ сделать это?

Спасибо за советы, если моя проблема не ясна или хорошо читаема, скажите мне

1 Ответ

0 голосов
/ 21 октября 2019

Попробуйте сделать так, чтобы вы создали массив массивов

$line['date'] = $date;
$line['severity'] = $severity;
$line['message'] = $message;

$log_message[] = $line;

Когда вы закончите загружать данные, достаточно простого

$messages = json_encode($log_message);

, а затем при декодировании - декодироватькрасиво как массив объектов.

Лучший пример кода

$line = [
        "message" => "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
        "level" => "ERROR",
        "date" => "2019-10-21 16:53:24",
        "short_message" => "Users.php 2055",
        "severity" => "Compile",
        "ip" => "",
        "trace" => ["core/Common.php MY_Exceptions->log_exception() (line:618)"],
        "short_trace" => "core/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri" => "[POST] /api/users/user"
        ];

$log_message[] = $line;

$line = [
        "message" => "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
        "level" => "ERROR",
        "date" => "2019-10-21 16:53:24",
        "short_message" => "Users.php 2055",
        "severity" => "Compile",
        "ip" => "",
        "trace" => ["core/Common.php MY_Exceptions->log_exception() (line:618)"],
        "short_trace" => "core/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri" => "[POST] /api/users/user"
        ];

$log_message[] = $line;

$messages = json_encode($log_message, JSON_PRETTY_PRINT );
print $messages;

$arr = json_decode($messages);
print_r($arr);

РЕЗУЛЬТАТЫ:

JSON String - PrettyPrint

[
    {
        "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() \/application\/controllers\/api\/Users.php 2055",
        "level": "ERROR",
        "date": "2019-10-21 16:53:24",
        "short_message": "Users.php 2055",
        "severity": "Compile",
        "ip": "",
        "trace": [
            "core\/Common.php MY_Exceptions->log_exception() (line:618)"
        ],
        "short_trace": "core\/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri": "[POST] \/api\/users\/user"
    },
    {
        "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() \/application\/controllers\/api\/Users.php 2055",
        "level": "ERROR",
        "date": "2019-10-21 16:53:24",
        "short_message": "Users.php 2055",
        "severity": "Compile",
        "ip": "",
        "trace": [
            "core\/Common.php MY_Exceptions->log_exception() (line:618)"
        ],
        "short_trace": "core\/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri": "[POST] \/api\/users\/user"
    }

С Print_r($arr)

Array
(
    [0] => stdClass Object
        (
            [message] => Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055
            [level] => ERROR
            [date] => 2019-10-21 16:53:24
            [short_message] => Users.php 2055
            [severity] => Compile
            [ip] => 
            [trace] => Array
                (
                    [0] => core/Common.php MY_Exceptions->log_exception() (line:618)
                )

            [short_trace] => core/Common.php MY_Exceptions->log_exception() (line:618)
            [uri] => [POST] /api/users/user
        )

    [1] => stdClass Object
        (
            [message] => Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055
            [level] => ERROR
            [date] => 2019-10-21 16:53:24
            [short_message] => Users.php 2055
            [severity] => Compile
            [ip] => 
            [trace] => Array
                (
                    [0] => core/Common.php MY_Exceptions->log_exception() (line:618)
                )

            [short_trace] => core/Common.php MY_Exceptions->log_exception() (line:618)
            [uri] => [POST] /api/users/user
        )

)
...