我正在创建一个数组,其中包含一些对象,如下面的代码:
$eventos = DB::select('SELECT *
FROM eventos
ORDER BY timestamp DESC');
foreach ($eventos as $evento){
$produtos = DB::select("SELECT *
FROM produtos
WHERE transaction_id = '$evento->transaction_id'");
$eventos = array(
'timestamp' => $evento->timestamp,
'revenue' => $evento->revenue,
'transaction_id' => $evento->transaction_id,
'store_name' => $evento->store_name,
'products' => array()
);
foreach ($produtos as $produto){
$products[] = array(
'name' => $produto->nome,
'price' => $produto->preco,
);
}
$eventos['products'] = $products;
echo json_encode($eventos);
}
}但是我的JSON是无效的:根据验证器,出现了错误“多个JSON根元素”。应该有
]
},
{
而不是
]
}{
我怎样才能做到这一点?
{
"timestamp":"2016 1",
"revenue":120,
"transaction_id":334,
"store_name":"Uai",
"products":[
{
"name":"Black Shoes",
"price":99
}
]
}{ //ERROR here
"timestamp":"2016 2",
"revenue":250,
"transaction_id":6665,
"store_name":"M Mall",
"products":[
{
"name":"Blue Shirt",
"price":100
},
{
"name":"Pink Pants",
"price":150
}
]
}
发布于 2019-03-07 17:17:36
您不会一个接一个地回显一系列JSON文档,这是无效的。
相反,您需要组装一个最终的单数数组并将其编码为JSON:
$final = [ ];
$eventos = DB::select('SELECT *
FROM eventos
ORDER BY timestamp DESC');
foreach ($eventos as $evento){
$produtos = DB::select("SELECT *
FROM produtos
WHERE transaction_id = '$evento->transaction_id'");
$data = array(
'timestamp' => $evento->timestamp,
'revenue' => $evento->revenue,
'transaction_id' => $evento->transaction_id,
'store_name' => $evento->store_name,
'products' => array()
);
foreach ($produtos as $produto){
$products[] = array(
'name' => $produto->nome,
'price' => $produto->preco,
);
}
$data['products'] = $products;
$final[] = $data;
}
}
echo json_encode($final);我不知道DB::Select是什么,但是如果它只是一个像mysqli或PDO这样的脆弱包装器,那么如果它不支持占位符值,就会有问题。不直接在查询中插入数据。相反,使用占位符(如? )并分别绑定值。
您的数据库驱动程序,无论它是什么,可能已经支持这一点,所以立即检查,以避免潜在的问题在未来。
https://stackoverflow.com/questions/55049460
复制相似问题