我正在尝试读取一个json文件,该文件具有页眉,正文和页脚部分,随后希望使用PHP代码插入mysql数据库中。
我试图读取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
答案 0 :(得分:1)
我无法重现您得到的错误,但是您当前拥有的代码存在一些问题。
您正在尝试使用$item
作为数组的内容而不是$value
,$tem
是数组的索引而不是内容。
密钥也区分大小写-您必须使用'ltP'
而不是'ltp'
...
foreach ($json_data['data'] as $item => $value) {
print $value['symbol'];
print ' - ';
print $value['ltP'];
print ' - ';
print '<br>';
}
答案 1 :(得分:0)
如果要将JSON解码为数组,则需要传递second parameter True。
<?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>';
}