PHP - как прочитать заголовок файла json и другие объекты и вставить в mysql - PullRequest
1 голос
/ 26 мая 2019

Я пытаюсь прочитать файл json, который имеет часть заголовка, тела и нижнего колонтитула и впоследствии хочу вставить в базу данных mysql, используя код PHP.

Я пытался прочитать файл json, однако в нем мало объектов заголовка и объекта данных. Объект данных имеет много записей. Я хочу читать заголовок и данные отдельно. Я пытался прочитать объект данных, однако даже оператор печати не работал. Пожалуйста, помогите разобрать заголовок и объект данных отдельно.

php код

$json = file_get_contents('./f.json');

$json_data = json_decode($json,true);

print_r($json_data);


foreach ($json_data['data'] as $item => $value) {
    print $item['symbol'];
    print ' - ';
    print $item['ltp'];
    print ' - ';
    print '<br>';
}

JSON файл

{

    "noChg":0,
    "adv":10,
    "dec":3,
    "data":[
        {
            "symbol":"TECHM",
            "open":"749.90",
            "high":"749.90",
            "low":"732.05",
            "ltP":"737.00",
            "ptsC":"-6.30",
            "per":"-0.85"
        },
        {
            "symbol":"HAVELLS",
            "open":"752.85",
            "high":"754.90",
            "low":"739.10",
            "ltP":"745.00",
            "ptsC":"-6.50",
            "per":"-0.86"
        },
        {
            "symbol":"NESTLEIND",
            "open":"10,813.00",
            "high":"10,849.90",
            "low":"10,592.30",
            "ltP":"10,682.40",
            "ptsC":"-114.65",
            "per":"-1.06"
        },
        {
            "symbol":"HEXAWARE",
            "open":"356.30",
            "high":"357.45",
            "low":"349.45",
            "ltP":"352.00",
            "ptsC":"-4.15",
            "per":"-1.17"
        },
        {
            "symbol":"ADANIENT",
            "open":"162.35",
            "high":"163.75",
            "low":"151.85",
            "ltP":"159.15",
            "ptsC":"-1.90",
            "per":"-1.18"
        },
        {
            "symbol":"TORNTPHARM",
            "open":"1,554.80",
            "high":"1,566.90",
            "low":"1,511.20",
            "ltP":"1,530.00",
            "ptsC":"-22.20",
            "per":"-1.43"
        },
        {
            "symbol":"BATAINDIA",
            "open":"1,374.90",
            "high":"1,374.90",
            "low":"1,329.00",
            "ltP":"1,345.00",
            "ptsC":"-20.50",
            "per":"-1.50"
        },
        {
            "symbol":"KAJARIACER",
            "open":"616.05",
            "high":"619.00",
            "low":"595.20",
            "ltP":"603.00",
            "ptsC":"-12.80",
            "per":"-2.08"
        },
        {
            "symbol":"RELINFRA",
            "open":"116.40",
            "high":"116.90",
            "low":"111.05",
            "ltP":"111.85",
            "ptsC":"-2.60",
            "per":"-2.27"
        },
        {
            "symbol":"PVR",
            "open":"1,783.80",
            "high":"1,783.80",
            "low":"1,698.85",
            "ltP":"1,716.00",
            "ptsC":"-50.85",
            "per":"-2.88"
        },
        {
            "symbol":"SUNTV",
            "open":"553.00",
            "high":"561.30",
            "low":"512.00",
            "ltP":"531.70",
            "ptsC":"-16.15",
            "per":"-2.95"
        },
        {
            "symbol":"JETAIRWAYS",
            "open":"146.15",
            "high":"152.90",
            "low":"142.35",
            "ltP":"147.70",
            "ptsC":"-7.75",
            "per":"-4.99"
        },
        {
            "symbol":"JUSTDIAL",
            "open":"744.00",
            "high":"744.00",
            "low":"673.35",
            "ltP":"680.60",
            "ptsC":"-66.35",
            "per":"-8.88"
        }
    ],
    "totQty":"14,259.87",
    "totQtyMil":"1,425.99",
    "totValMil":"353.59",
    "time":"May 24, 2019 16:00:00",
    "totVal":"35,358.82" }

Я ожидаю проанализировать и извлечь значения из объектов данных, но получаю следующую ошибку:

Неустранимая ошибка PHP: невозможно использовать объект типа stdClass в качестве массива в /home/fut/public_html/on.php

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Я не могу воспроизвести полученную вами ошибку, но есть несколько проблем с кодом, который у вас есть в данный момент.

Вы пытаетесь использовать $item в качестве содержимого массива вместо $value, $tem - это индекс массива, а не его содержимое.

Также, поскольку ключи чувствительны к регистру - вы должны использовать 'ltP', а не 'ltp' ...

foreach ($json_data['data'] as $item => $value) {
    print $value['symbol'];
    print ' - ';
    print $value['ltP'];
    print ' - ';
    print '<br>';
}
0 голосов
/ 26 мая 2019

Вам нужно передать второй параметр True , если вы хотите, чтобы JSON был декодирован как массив.

<?php
$json = file_get_contents('./f.json');

$json_data = json_decode($json, true);

print_r($json_data);

//to see header
$header = array_keys($json_data['data'][0]);
var_export($header);

$header2 = [];
foreach($json_data as $key => $item) {
    if(!is_array($item)) {
        $header2[$key] = $item;
    }
}
//to see the other header
var_export($header2);

foreach ($json_data['data'] as $item => $value) {
print $item['symbol'];
print ' - ';
print $item['ltp'];
print ' - ';
print '<br>';

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