Разбор (3-го) вложенного JSON с PHP - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь проанализировать следующий JSON с PHP, но на самом последнем уровне ("bank") возникают некоторые проблемы, вот информация:

JSON:

{
    "loan": {
        "fu": "1046",
        "vb": "84",
        "loan_type": "1",
        "type_cocg": "14",
        "meeting_place": "PLACE",
        "meeting_date": "2019-05-29",
        "creation_date": "2019-05-29 12:49:53",
        "user_id": "1001-1556",
        "member": [{
            "mem_id": "1",
            "name": "FIRST MEMBER",
            "parentage": "PARENTAGE",
            "cnic": "3393399393393",
            "gender": "1",
            "dob": "1994-05-29",
            "marital_status": "1",
            "spouse_name": "SPOUSE",
            "spouse_cnic": "9939439939393",
            "pres_address": "PRES ADDRESS",
            "perma_address": "PERMA ADDRESS",
            "mother_name": "MOTHER NAME",
            "cell": "94494944949",
            "loan_amount": "30000",
            "network": "1",
            "sim_ownership": "2",
            "co_status": "3",
            "occupation_category": "2",
            "agri_occ": "null",
            "nonagri_occ": "3",
            "education": "1",
            "disability": "2",
            "religion": "6",
            "head": "2",
            "purpose": "2",
            "repayment_mode": "null",
            "duration": "4",
            "purpose_ent": "null",
            "purpose_agri": "null",
            "area_unit": "2",
            "agri_investment": "",
            "agri_expense": "",
            "purpose_livestock": "3",
            "loan_id_mem": "1",
            "monthly_income": "15000",
            "monthly_expense": "2000",
            "monthly_saving": "13000",
            "yearly_saving": "156000",
            "male": "2",
            "female": "2",
            "children": "2",
            "cow": "2",
            "buffalo": "2",
            "goat": "2",
            "sheep": "2",
            "agri_area_unit": "1",
            "land_own": "3",
            "land_lease": "3",
            "house_own": "3",
            "house_rent": "3",
            "caste": "CASTE",
            "active_loan": "1",
            "bank": [{
                "id": "1",
                "loan_id": "1",
                "loan_mem_id": "1",
                "bank_id": "1",
                "bank_loan": "",
                "bank_remaining": "2000",
                "purpose": "1",
                "purpose_agri": "16",
                "purpose_livestock": "null",
                "purpose_ent": "null"
            }, {
                "id": "2",
                "loan_id": "1",
                "loan_mem_id": "1",
                "bank_id": "6",
                "bank_loan": "",
                "bank_remaining": "500",
                "purpose": "3",
                "purpose_agri": "16",
                "purpose_livestock": "null",
                "purpose_ent": "14"
            }]
        }, {
            "mem_id": "2",
            "name": "SECOND MEMBER",
            "parentage": "PARENTAGE",
            "cnic": "3939939393399",
            "gender": "1",
            "dob": "1994-05-29",
            "marital_status": "1",
            "spouse_name": "SPOUSE",
            "spouse_cnic": "4949949494999",
            "pres_address": "ADDRESS",
            "perma_address": "ADDRESS",
            "mother_name": "MOTHER",
            "cell": "49494949494",
            "loan_amount": "20000",
            "network": "1",
            "sim_ownership": "2",
            "co_status": "2",
            "occupation_category": "2",
            "agri_occ": "null",
            "nonagri_occ": "2",
            "education": "1",
            "disability": "1",
            "religion": "1",
            "head": "1",
            "purpose": "1",
            "repayment_mode": "null",
            "duration": "3",
            "purpose_ent": "null",
            "purpose_agri": "16",
            "area_unit": "1",
            "agri_investment": "1500",
            "agri_expense": "2000",
            "purpose_livestock": "3",
            "loan_id_mem": "1",
            "monthly_income": "15000",
            "monthly_expense": "200",
            "monthly_saving": "14800",
            "yearly_saving": "177600",
            "male": "0",
            "female": "0",
            "children": "2",
            "cow": "2",
            "buffalo": "2",
            "goat": "2",
            "sheep": "2",
            "agri_area_unit": "1",
            "land_own": "3",
            "land_lease": "3",
            "house_own": "3",
            "house_rent": "2",
            "caste": "CASTE 2",
            "active_loan": "1",
            "bank": [{
                "id": "3",
                "loan_id": "1",
                "loan_mem_id": "2",
                "bank_id": "6",
                "bank_loan": "",
                "bank_remaining": "300",
                "purpose": "1",
                "purpose_agri": "43",
                "purpose_livestock": "null",
                "purpose_ent": "null"
            }]
        }]
    }
}

PHP код:

$json = json_decode($content, true);
$json['loan']['fu']; // This works !

foreach($json['loan']['member'] as $item) {
   $name = $item['name']; // This works !
   foreach($json['loan']['member']['bank'] as $bank_item) { // THIS DOES NOT WORKS!

   }
}

Последний цикл foreach выдает ошибку, говоря:

Примечание: неопределенный индекс: банк

Есть ли какие-либо подсказки относительно того, что может быть причиной проблемы, или есть какой-то улучшенный способ анализа того же JSON, который был бы очень полезен.

Ответы [ 4 ]

2 голосов
/ 20 июня 2019

Ваш анализ JSON в порядке. ваш доступ отсутствует индекс.

Поскольку «банк» находится внутри массива «член», вы должны получить доступ как $json['loan']['member'][0]['bank'] (0 жестко закодировано - вы также можете переключиться на 1).

Если вы используете для, то вы должны сделать:

foreach($json['loan']['member'] as $item) {  
   $name = $item['name']; // This works !
   foreach($item['bank'] as $bank_item) { // use $item

   }
}
1 голос
/ 20 июня 2019

Используйте только один foreach() и получите значение элемента банка.Если вам необходимо выполнить цикл для элемента банка, вы можете использовать другой foreach()

$json = json_decode($content, true);
foreach($json['loan']['member'] as $item) {
  print_r($item['bank']);
  foreach($item['bank'] as $bank_item) { 
      echo $bank_item;
   }
}

DEMO: https://3v4l.org/qB8mV

0 голосов
/ 21 июня 2019

Вы также можете использовать функцию array_walk_recursive()

$json = json_decode($content, true);
$i=0;
foreach($json['loan']['member'] as $item) { 
 array_walk_recursive($json['loan']['member'][$i]['bank'], function($value,$key) {
        echo  $key.' :'.$value ." \n";
    });
 $i++;    
}

DEMO: https://3v4l.org/KDR6V

0 голосов
/ 20 июня 2019

Вы пропустили, что элемент также является многомерным массивом

<code>$json = json_decode($content, true);
    /*
    echo "<pre>";
    print_r($json);
    echo "
"; * / foreach ($ json ['loan'] ['member'] как $ item => $ value) {$ name = $ value['name']; // Это работает! foreach ($ json ['loan'] ['member'] [$ item] ['bank'] как $ bank_item) {// ЭТО НЕ РАБОТАЕТ! print_r ($ bank_item);}}
...