MrLincomins
@MrLincomins

Как распарсить json?

Есть Json файл, в нём находятся такие данные: {"Имя": Генадий, "Логин": JUJ, "Пароль": 228, "Год рождения": 3390 }
Как мне отдельно вывести имя, логин, пароль и год рождения?
$json = file_get_contents('application.json');
$data = json_decode($json, true);
$Name = $data[0]['Имя'];
print $Name;

Таким способом не работает...
Заранее спасибо.
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
В рамках бредопрограммирования я написал функцию, которая превращает твою строку в валидный json

function repairUnqotedJsonValues(string $json) : string {
    $json = str_replace(": ", ":", $json);
    $json = str_replace("{ ", "{", $json);
    $json = str_replace(" }", "}", $json);
    $quotes = 0;
    $fixMode = false;
    $repaired = [];
    
    foreach (mb_str_split($json) as $char) {
        $add = [$char];
    
        if ($fixMode) {
            if ($char === ":") {
                array_push($add, "\"");
            }
            
            if ($char === "," || $char === "}") {
                array_unshift($add, "\"");
            }
            
            if ($char === "\"") {
                $fixMode = false;
            }
        }
        
        $repaired = array_merge($repaired, $add);
        
        if ($char === "\"") {
            $quotes++;
        }
        
        if ($quotes === 2) {
            $fixMode = true;
            $quotes = 0;
        }
    }
    
    return implode("", $repaired);
}


Далее, после обработки строки с её помощью можно уже пользоваться json_decode:
$weirdString = file_get_contents('application.json');
$json = repairUnqotedJsonValues($weirdString);
$user = json_decode($json);
$name = $user->{'Имя'};
print $name;


Ну а правильным вариантом будет, конечно, хранение в application.json валидного json'а, а не строки в непонятном формате.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kotcich
@kotcich
Я скучный.
$json = file_get_contents('application.json', true);
$data = json_decode($json, true);
$Name = $data[0]['Имя'];
print $Name;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы