Как я могу разобрать файл JSON с PHP? - PullRequest
367 голосов
/ 03 декабря 2010

Я попытался проанализировать файл JSON с помощью PHP. Но я застрял сейчас.

Это содержимое моего файла JSON:

{
    "John": {
        "status":"Wait"
    },
    "Jennifer": {
        "status":"Active"
    },
    "James": {
        "status":"Active",
        "age":56,
        "count":10,
        "progress":0.0029857,
        "bad":0
    }
}

И вот что я пробовал до сих пор:

<?php

$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);

echo $json_a['John'][status];
echo $json_a['Jennifer'][status];

Но поскольку я заранее не знаю имен (например, 'John', 'Jennifer') и всех доступных ключей и значений (например, 'age', 'count'), я думаю, что мне нужно создать цикл foreach.

Буду признателен за пример.

Ответы [ 16 ]

3 голосов
/ 31 мая 2013

Попробуйте:

foreach ($json_a as $key => $value)
 {
   echo $key, ' : ';
   foreach($value as $v)
   {
       echo $v."  ";
   }
}
1 голос
/ 25 августа 2014

Когда вы декодируете строку json, вы получите объект.не массив.Таким образом, лучший способ увидеть структуру, которую вы получаете, это сделать var_dump для декодирования.(этот var_dump может помочь вам понять структуру, в основном в сложных случаях).

<?php
     $json = file_get_contents('/home/michael/test.json');
     $json_a = json_decode($json);
     var_dump($json_a); // just to see the structure. It will help you for future cases
     echo "\n";
     foreach($json_a as $row){
         echo $row->status;
         echo "\n";
     }
?>
0 голосов
/ 12 марта 2019

Я использую приведенный ниже код для преобразования JSON в массив в PHP, Если JSON действителен, то json_decode() работает хорошо и возвращает массив, Но в случае неправильной формы JSON вернет NULL,

<?php
function jsonDecode1($json){
    $arr = json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return NULL
var_dump( jsonDecode1($json) );
?>

Если в случае неправильно сформированного JSON вы ожидаете только массив, вы можете использовать эту функцию,

<?php
function jsonDecode2($json){
    $arr = (array) json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return an empty array()
var_dump( jsonDecode2($json) );
?>

Если в случае неправильно сформированного JSON вы хотите остановить выполнение кода, вы можете использовать эту функцию,

<?php
function jsonDecode3($json){
    $arr = (array) json_decode($json, true);

    if(empty(json_last_error())){
        return $arr;
    }
    else{
        throw new ErrorException( json_last_error_msg() );
    }
}

// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );
?>
0 голосов
/ 29 июля 2016

Самый быстрый способ отобразить все значения json - использовать цикл в цикле, первый цикл получит все объекты, а второй - значения ...

foreach($data as $object) {

        foreach($object as $value) {

            echo $value;

        }

    }
0 голосов
/ 19 ноября 2014
$json_a = json_decode($string, TRUE);
$json_o = json_decode($string);



foreach($json_a as $person => $value)
{
    foreach($value as $key => $personal)
    {
        echo $person. " with ".$key . " is ".$personal;
        echo "<br>";
    }

}
0 голосов
/ 26 января 2012

Вы должны дать так:

echo  $json_a['John']['status']; 

echo "<>"

echo  $json_a['Jennifer']['status'];

br inside <>

Что дает результат:

wait
active
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...