Фатальная ошибка: Неперехваченная ошибка типа: Не удается получить доступ к смещению строки типа в строке после декодирования файла json в php

#php #json

Вопрос:

Использование Php 7.2

Краткое изложение проекта.

  • Я извлекаю файл json из Интернета в свой php-скрипт.
  • Расшифруйте json.
  • Отобразите информацию в таблице html.

Вот сценарий

 <?php
$url_meta               =   "LINK_TO_json" ;
$data_meta              =   file_get_contents($url_meta);
$result_meta            =   json_decode($data_meta);
?>


<table id="data-armours-1" class="table table-striped table-bordered">
    <thead>
        <tr>
                <th  class="align-middle">test</th>
        </tr>
    </thead>
    <tbody>
        <?php
            foreach($result_meta["Product"] as $key => $value) 
        {;?>
        <tr>
            <td class="align-middle"><?php echo $value["IsSuspended"];?></td>
            <td class="align-middle"><?php echo $value["*****"];?></td>
            <td class="align-middle"><?php echo $value["*****"];?></td>
            <td class="align-middle"><?php echo $value["*****"];?></td>
            <td class="align-middle"><?php echo $value["*****"];?></td>
            <td class="align-middle"><?php echo $value["*****"];?></td>
            .....
        </tr>
        <?php
        }?>
    </tbody>
</table>
 

Вар тупой для $result_meta

 var_dump ($result_meta );


string(2957684) "
{"Product":[
{
"IsSuspended":false,
"IsBlocked":false,
"IsPublishedOnWeb":true,
"IsServiceItem":false,
"IsSpecialProduct":false,
"Brand":"BraND",
"ProductionOrigin":1,
"HasVariationParent":false,
"HasVariationChild":false,
"IsTaxExempt":false,
"IsDiscountable":true,
"ProductDimensions":{
    "StockCode":"AB1010",
    "Length":235.00,
    "Height":160.00,
    "Width":20.00,
    "DimensionUnit":"mm",
    "Mass":0.20,
    "MassUnit":"Kg"
},
"TariffCode":"95030090",
"TariffDescription":"ABACUS",
"ProductDefaultCard":"",
"BarcodeType":"GTIN13",
"RetailPriceIncTax":*****,
"CustomerDiscount":*****,
"FriendlyTitle":"",
"PrintDescription":"",
"VariationMetaData":{
    "StockParentId":-1,
    "VariationFriendlyTitle":"",
    "VariationFriendlyStockCode":"",
    "OriginalStockCodeSuffixAndFootnote":""
},
"AttributeData":null,
"CompositeVariationFootnote":"",
"ExternalSiteWebURL":"",
"CustomerProductCode":null,
"TaxRate":0.150000,
"MaxDiscount":100.00,
"StockID":*****,
"StockCode":"*****",
"CustomerPrice":*****,
"CustomerTaxAmount":******,
"CustomerPriceWithTax":******,
"Description":"",
"ProductBarCode":"",
"FuturePrice":null,
"DetailedDescription":"
    rn
    Helps teach math skills
    rn
    
    rn
    
    rn

",
"RetailPrice":,
"IntermediatePacks":[
    {
        "PackBarCode":"",
        "PackQTY":,
        "StockCode":""
    },
    {
        "PackBarCode":"",
        "PackQTY":100,
        "StockCode":""
    }
],
"AlternativeProducts":[],
"ProductImageLinks":[""],
"ProductDocumentLinks":null,
"KitItems":[],
"PromotionInfo":null,
"WarehouseStockLevels":[    
    {
        "Amount":,
        "StockCode":"",
        "WarehouseCode":null,
        "WarehouseDescription":""
    }
],
"MainProductImageLink":"",
"TotalWarehouseStock":***,
"PublishingCategory":
    {
        "CategoryID":***,
        "CategoryName":"****"
    }
}
,{
"IsSuspended":false,
"IsBlocked":false,
"IsPublishedOnWeb":true,
"IsServiceItem":false,
"IsSpecialProduct":false,
"Brand":"BraND",
"ProductionOrigin":1,
"HasVariationParent":false,
"HasVariationChild":false,
"IsTaxExempt":false,
"IsDiscountable":true,
"ProductDimensions":{
    "StockCode":"AB1010",
    "Length":235.00,
    "Height":160.00,
    "Width":20.00,
    "DimensionUnit":"mm",
    "Mass":0.20,
    "MassUnit":"Kg"
},
"TariffCode":"95030090",
"TariffDescription":"ABACUS",
"ProductDefaultCard":"",
"BarcodeType":"GTIN13",
"RetailPriceIncTax":*****,
"CustomerDiscount":*****,
"FriendlyTitle":"",
"PrintDescription":"",
"VariationMetaData":{
    "StockParentId":-1,
    "VariationFriendlyTitle":"",
    "VariationFriendlyStockCode":"",
    "OriginalStockCodeSuffixAndFootnote":""
},
"AttributeData":null,
"CompositeVariationFootnote":"",
"ExternalSiteWebURL":"",
"CustomerProductCode":null,
"TaxRate":0.150000,
"MaxDiscount":100.00,
"StockID":*****,
"StockCode":"*****",
"CustomerPrice":*****,
"CustomerTaxAmount":******,
"CustomerPriceWithTax":******,
"Description":"",
"ProductBarCode":"",
"FuturePrice":null,
"DetailedDescription":"
    rn
    Helps teach math skills
    rn
    
    rn
    
    rn

",
"RetailPrice":,
"IntermediatePacks":[
    {
        "PackBarCode":"",
        "PackQTY":,
        "StockCode":""
    },
    {
        "PackBarCode":"",
        "PackQTY":100,
        "StockCode":""
    }
],
"AlternativeProducts":[],
"ProductImageLinks":[""],
"ProductDocumentLinks":null,
"KitItems":[],
"PromotionInfo":null,
"WarehouseStockLevels":[    
    {
        "Amount":,
        "StockCode":"",
        "WarehouseCode":null,
        "WarehouseDescription":""
    }
],
"MainProductImageLink":"",
"TotalWarehouseStock":***,
"PublishingCategory":
    {
        "CategoryID":***,
        "CategoryName":"****"
    }
}
]}"
 

Проблема

Я получаю следующую ошибку PHP

 Fatal error: Uncaught TypeError: Cannot access offset of type string on string in file/name/:linenumber Stack trace: #0 {main} thrown in file/name/:linenumber on line **
 

Желаемый результат

  • Может ли кто-нибудь, пожалуйста, посоветовать, как я отображаю эти данные JSON в таблице html?
  • Пожалуйста, обратите внимание, что не будут использоваться все данные.
  • но вам также нужно будет знать, как использовать «Промежуточные пакеты»: [].

Спасибо

Комментарии:

1. Как выглядела $data_meta?

2. Если это код, вызывающий эту ошибку, то один из элементов в $result_meta["Product"] нем является не массивом, а строкой. Это предполагает file/name/:linenumber , что часть сообщения об ошибке указывает на одну из строк, которая выводит a $value["*****"] в вашем foreach цикле.

3. @rickdenhaan если вы посмотрите на var_dump, весь $result_meta-это одна большая строка. Я подозреваю, что исходные данные были дважды закодированы.

4. @ADyson Хорошая мысль, я предположил, что на самом деле это была свалка $data_meta . Если это $result_meta так, то ваши подозрения, вероятно, верны.

5. Да, это строка JSON с двойным кодированием. Внешние метки и все»», чтобы избежать внутренних, выдают это. Это нужно исправить, это не должно было быть сохранено таким образом. Пусть тот, кто его создал, разберется с этим.