首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个JSON根元素- PHP

多个JSON根元素- PHP
EN

Stack Overflow用户
提问于 2019-03-07 17:15:07
回答 1查看 954关注 0票数 0

我正在创建一个数组,其中包含一些对象,如下面的代码:

代码语言:javascript
复制
$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根元素”。应该有

]

},

{

而不是

]

}{

我怎样才能做到这一点?

代码语言:javascript
复制
 {

   "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
      }
   ]
} 

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 17:17:36

您不会一个接一个地回显一系列JSON文档,这是无效的。

相反,您需要组装一个最终的单数数组并将其编码为JSON:

代码语言:javascript
复制
$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这样的脆弱包装器,那么如果它不支持占位符值,就会有问题。不直接在查询中插入数据。相反,使用占位符(如? )并分别绑定值。

您的数据库驱动程序,无论它是什么,可能已经支持这一点,所以立即检查,以避免潜在的问题在未来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55049460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档