繁体   English   中英

无法在 PHP 中解析嵌套的 Json 数组,而 print_r 函数正在正确打印所有值

[英]Not able to parse nested Json array in PHP while print_r function is printing all values properly

我正在尝试解析一个 json 数组字符串。 虽然 print_r 正确打印了所有值,但在获取记录时我失败了。

我一定是在做一些非常错误的事情。 你能帮忙纠正一下吗。

所以这是我的代码

<?
  $str ='
  { 
   "tenant_view_details": [ 
   { 
    "status":"S", 
    "tenant_general":[
    {"tenant_id":"6003","code":"ICI001","type":"BANK","category":"SM","gstn":"IWSDFS7372","pan":"KSAH9876AS","cin":"ASHED456","name":"ICICI Bank","address_line_1":"23, Hertz Plaza, Rajiv Chowk","address_line_2":" ","address_city":"New Delhi","address_distict ":"New Delhi","address_state ":"DL","address_state_code ":"07","address_pin ":"119923","contact_name ":"contact_name","contact_phone ":"1234567890","contact_std_code ":"11","contact_landline ":"1234567890","contact_email_id ":"contact@email.com"} ], 
    "tenant_bank": [ 
    { "bank_name ":"xyz","bank_account_no ":"12345","account_type ":"abc","ifsc_code ":"xx123","address_line_1 ":"qwer","address_line_2         ":"23","address_city ":"abc","address_district ":"xyz","address_state_name ":"asd","address_state_code ":"02","address_pin ":"123456" } ], 
    "tenant_agreement": [ 
    { "category ":"OM","tenancy_type ":"EXT","echarge_type ":"FIX","total_tenancy_value ":"32900.00","energy_charge_value ":"16543.00","rev_share_pct ":"0.05","start_dt":"10-1-2018","end_dt":"31-12-2020","attachment_path ":"na","change_value ":"na","latest_flag ":"Y","w_status ":"20","status ":"ACT"} ],
    "tenant_sites": [ 
    {"tenant_id":"6003","site_master_id":"1020","tn_site_code":"UPWMORA00069473","tn_site_name":"Deendayal Nagar","tn_cluster":"CLUSTER-03","circle_code":"UW","tower_type":"MAST","site_type":"ID","tenancy_type":"EXT","echarge_type":"FIX","primary_tenant":"N","latest_flag ":"Y"}, {"tenant_id":"6003","site_master_id":"1019","tn_site_code":"UPWGHAZ00069467","tn_site_name":"DJ College Newari Road, Modina","tn_cluster":"CLUSTER-03","circle_code":"UW","tower_type":"MAST","site_type":"ID","tenancy_type":"EXT","echarge_type":"FIX","primary_tenant":"N","latest_flag ":"Y"}, {"tenant_id":"6003","site_master_id":"1018","tn_site_code":"UPWMORA00069464","tn_site_name":"Bazar Makhbra","tn_cluster":"CLUSTER-03","circle_code":"UW","tower_type":"RTT","site_type":"OD","tenancy_type":"EXT","echarge_type":"FIX","primary_tenant":"N","latest_flag ":"Y"}, {"tenant_id":"6003","site_master_id":"1016","tn_site_code":"UPWGHAZ00069454","tn_site_name":"Hoshdarpur Garhi","tn_cluster":"CLUSTER-03","circle_code":"UW","tower_type":"RTT","site_type":"OD","tenancy_type":"EXT","echarge_type":"FIX","primary_tenant":"N","latest_flag ":"Y"}, {"tenant_id":"6003","site_master_id":"1011","tn_site_code":"UPWMUZN00069430","tn_site_name":"Sikanderpur","tn_cluster":"CLUSTER-03","circle_code":"UW","tower_type":"RTT","site_type":"ID","tenancy_type":"EXT","echarge_type":"FIX","primary_tenant":"N","latest_flag ":"Y"}, {"tenant_id":"6003","site_master_id":"1008","tn_site_code":"UPWALIG00069299","tn_site_name":"Mukund Vihar","tn_cluster":"CLUSTER-03","circle_code":"UW","tower_type":"RTT","site_type":"","tenancy_type":"EXT","echarge_type":"FIX","primary_tenant":"N","latest_flag ":"Y"} ]
 }
 ]
}
';
$dataset = json_decode($str, true);
//print_r ($dataset);

foreach ($dataset['tenant_view_details'] as $newdata) {
 $general = $newdata['tenant_general'];
 $bank = $newdata['tenant_bank'];
 $agreement = $newdata['tenant_agreement'];
 $sites = $newdata['tenant_sites'];
}
//prinitng data
echo "<br/>";
print_r($general);
echo "<br/>";
print_r($bank);
echo "<br/>";
print_r($agreement);
 echo "<br/>";

foreach($general as $general_data){
 (isset($general_data['tenant_id']) && !empty($general_data['tenant_id']))? $tenant_id=$general_data['tenant_id'] : $tenant_id="not set";
 echo "<br/>tenant_id::" . $tenant_id;
}

foreach($bank as $bank_data){
 (isset($bank_data['bank_name']) && !empty($bank_data['bank_name']))? $bank_name=$bank_data['bank_name'] : $bank_name="not set";     
 echo "<br/>bank_name:" . $bank_data['bank_name'];
}
foreach($agreement as $agreement_data){
 (isset($agreement_data['category']) && !empty($agreement_data['category']))? $category=$agreement_data['category'] : $category="not set";
 (isset($agreement_data['tenancy_type']) && !empty($agreement_data['tenancy_type']))? $tenancy_type=$agreement_data['tenancy_type'] : $tenancy_type="not set";
 (isset($agreement_data['echarge_type']) && !empty($agreement_data['echarge_type']))? $echarge_type=$agreement_data['echarge_type'] : $echarge_type="not set";
 echo "<br/>category:" . $category;
 echo "<br/>tenancy_type:" . $tenancy_type;
 echo "<br/>echarge_type:" . $echarge_type;
}
?>

你的问题是在你的$bank$category数组中,所有的键上都有尾随空格。 如果您更改引用以包含这些空格,则您的代码可以正常工作。 https://3v4l.org/GX5iC

或者,您可以在foreach循环中使用类似以下代码的内容来修剪数组键:

$bank_keys = array_map('trim', array_keys($bank_data));
$bank_data = array_combine($bank_keys, array_values($bank_data));

您还可以创建一个递归函数来修剪整个$dataset值。 例如:

function trim_keys($array) {
    foreach ($array as $key => $value) {
        echo "trimming key '$key' to '" . trim($key) . "'\n";
        unset($array[$key]);
        $array[trim($key)] = $value;
        if (is_array($value))
            $array[trim($key)] = trim_keys($value);
        else
            $array[trim($key)] = $value;
    }
    return $array;
}

然后,通过使用

$dataset = trim_keys($dataset);

您的代码将正常工作。 3v4l.org 上的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM