iT邦幫忙

1

php陣列轉json 資料格式

各位大大好:
想請問

try {
$conn= new PDO("mysql:host=$hostdb;dbname=$namedb",$userdb,$passdb);
//echo'資料庫伺服器連線及資料庫開啟成功'.'<br>';
$conn->exec("SET CHARACTER SET utf8");
$Bdate=$_POST['Bdate'];
$mdata=$_POST['mdata'];
$sql5="select * from ".$mdata." where bdate= :Bdate";
$sql6 =$conn->prepare($sql5);
$ar_val=array('Bdate'=>$Bdate);
if($sql6->execute($ar_val)){
while($row=$sql6->fetch())
{
$show = array('timest'=>$row['timest'],'clr'=>$row['clr']);	
//echo $row['timest'].'-'.$row['clr'];
echo json_encode($show,JSON_UNESCAPED_UNICODE);
}}
$conn=null;
}

用console.log跑出來的程式結果,但使用JSON.parse(data)轉換成物件會出錯..一次一筆資料可以,但一次多筆資料就不行
https://ithelp.ithome.com.tw/upload/images/20180227/20097057JbCqn8FOMh.png

但我需要的格式是
{ "timest": "08:00", "clr": "EC4561" }, { "timest": "08:00", "clr": "EC5566" }, { "timest": "08:00", "clr": "EC1234" }]

想請問這有甚麼參數或方法嗎?

謝謝!

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 5 級 ‧ 2018-02-27 19:22:18 檢舉
$show = [];
while($row=$sql6->fetch())
$show[] = array('timest'=>$row['timest'],'clr'=>$row['clr']);
echo json_encode($show,JSON_UNESCAPED_UNICODE);
weiclin iT邦高手 5 級 ‧ 2018-02-27 19:23:17 檢舉
注意樓上沒有大括號, 只有第三行在 while 裡跑
mayyola iT邦新手 3 級 ‧ 2018-02-27 22:18:38 檢舉
請問w大為什麼$show = [];這是甚麼意思呢?
如果單行是不是也這樣寫比較好?(如果是我之前的都寫錯了><)
謝謝..
weiclin iT邦高手 5 級 ‧ 2018-02-27 23:13:10 檢舉
$show = []; 跟 $show = array(); 相等
mayyola iT邦新手 3 級 ‧ 2018-02-27 23:38:55 檢舉
那為什麼不能寫成$show = array('timest'=>$row['timest'],'clr'=>$row['clr']); (我剛有測過(另外刪除$show = [];)好像不能這樣寫,只會顯示一行...)
還要多加$show[] = array('timest'=>$row['timest'],'clr'=>$row['clr']);
weiclin iT邦高手 5 級 ‧ 2018-02-27 23:53:22 檢舉
因為你送回去的是好多組資料, 所以要全部丟進一個陣列裡, 不然格式不對啊, 你比較一下兩種方法瀏覽器裡看到的 json 字串長怎樣吧
$show[] = array(...) 意思是新增一筆資料到 $show 這個陣列, 少了那個 [] 意思差很多
mayyola iT邦新手 3 級 ‧ 2018-02-28 11:59:32 檢舉
所以$show[]會ㄧ直儲存不會覆蓋之前存的嗎,謝謝哦~我ㄧ直以為array()的形式就是陣列。
weiclin iT邦高手 5 級 ‧ 2018-02-28 14:46:53 檢舉
看文件: http://php.net/manual/en/function.array-push.php
froce iT邦研究生 4 級 ‧ 2018-02-28 21:52:09 檢舉
閒閒沒事看了一下php的array()。
感覺像python的 dictionary,但又多了一堆其他的鍵值存取。
phper 真的會用到這麼多方式來存取嗎?有些特性看起來不是很實用的感覺。
http://php.net/manual/en/language.types.array.php
像他的範例5。
to:froce
php其實它是一種弱形態的語言。為了搭配其它語言的寫法。所以它有很多雖然是同一種功能,但可以有不一樣的寫法進行。
我曾經有在網路上說過,php可以是什麼都是什麼都不是。

其實php在7版後,有更多更好玩的寫法。
為何我的答案會用array()而不用[]。其也是為了array()無論是任何php版本都可以通用的。[]則是需要5.4版以上才能這樣使用。(要不然會報錯)
mayyola iT邦新手 3 級 ‧ 2018-03-01 14:38:29 檢舉
為什麼你們都看得懂裡面寫的意思,我都好難看得懂阿- -.....
weiclin iT邦高手 5 級 ‧ 2018-03-01 19:00:47 檢舉
看懂官方文件是寫程式的基本要求, 把你看不懂的地方看到懂就是成長, 同時這也是某些公司面試時會評分的點
froce iT邦研究生 4 級 ‧ 2018-03-01 19:53:19 檢舉
寫程式最重要的是要會看官方文件和google...
感謝yoching大解釋。
不過我還是習慣強型別,連寫 javascript 我都會故意指定型別。之前吃過虧。哈

2 個回答

3
浩瀚星空
iT邦新手 2 級 ‧ 2018-02-27 20:04:00
最佳解答

因為你搞錯json的相對應格式了。
一次轉換成物件只能一組。
但你輸出了多個json格式。當然轉換不了。
正確的做法是

$show=array();
while($row=$sql6->fetch())
{
   $show[] = array('timest'=>$row['timest'],'clr'=>$row['clr']);	
}
echo json_encode($show,JSON_UNESCAPED_UNICODE);

也就是將你的資料化成一個多維陣列後,再轉json出去給js處理就好了。
不要以為JSON.parse可以幫你將多個json組合成一個。

mayyola iT邦新手 3 級 ‧ 2018-02-27 22:19:30 檢舉

感謝y大的解答:)

不明
【**此則訊息已被站方移除**】

我要發表回答

立即登入回答