作者don750421 (1+1≠2)
看板Web_Design
標題[問題] JSON轉成Object?
時間Wed Sep 2 20:12:41 2015
最近使用一個套件叫 select2
因為我的資料來源來自DB,所以我在後端透過DataTable轉成select2 要吃的格式...
Select2要吃的格式大致長這樣
var aa = [{id:'2',text:'philosophy',children: [{id: '2', text:'ethics'},
{id: '3', text:'eefecs'},
{id: '4', text:'eefecs'}]},
{id:'3',text:'sociology', children: [{id: '2', text:'ethics'},
{id: '5', text:'eefeet'},
{id: '8', text:'eefecs'}]},
{id:'4',text:'ddgeology', children: [{id: '9', text:'ethscs'},
{id: '8', text:'eefecs'},
{id: '7', text:'asefcs'}]}];
如果我在前端將aa傳給select2 元件,確實可以使用,因為會直接視為aa有三個物件。
但是,如果我透過AJAX,在後台組成跟aa一樣的字串,
再透過JSON傳到前台。並使用一個變數(假設為bb)承接。
我將bb丟給select2元件,會拋出錯誤,而在前端用DEBUG看,bb會是一個字串。
這時又不會將bb視為3個物件。
於是,想說用JSON.parse(bb)轉成物件,但又會拋出Expection.
請問各位前輩,後端字串要如何像aa變數一樣變成三個物件。
先謝謝各位前輩指點。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.106.194
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Web_Design/M.1441195965.A.AF5.html
1F:推 Ayukawayen: JSON的規範比JS宣告變數的文法嚴 引號逗號都要注意 09/02 20:32
2F:→ Ayukawayen: 建議var bb = JSON.stringify(aa); JSON.parse(bb) 09/02 20:33
3F:→ Ayukawayen: 後台丟出來的字串 用JSON encoder包 不要自己組 09/02 20:34
感謝前輩指點,但是透過您所說的方式...
用DEBUG查看bb,仍然是字串@@
在後台我有使用JSON.NET組成再往前台丟...
return new JsonConvert.SerializeObject(
new object{Result:true,ResultText:jsonstr,ResultMsg:ErrMsg });
前台接回來的方式就...
success: function(data){
if(data.Result){ bb = data.ResultText}
},
但是就遇到上述的問題...暈~
※ 編輯: don750421 (114.39.106.194), 09/02/2015 22:04:18
※ 編輯: don750421 (114.39.106.194), 09/02/2015 22:05:48
4F:→ lovving777: 前端可以使用typeof()確認物件是String或Object 09/03 01:04
5F:→ lovving777: 試試看var bb = JSON.stringify(aa); 09/03 01:06
6F:→ lovving777: bb = JSON.parse(bb); 09/03 01:06
7F:→ lovving777: JSON.stringify() 是將JSON Object轉為String 09/03 01:09
8F:→ lovving777: JSON.parse() 是將JSON String 轉為物件 09/03 01:09
9F:→ lbeeon: 有 response的資料? 話說json.net和c#原生轉出來會不太一 09/03 18:38
10F:→ lbeeon: 樣 09/03 18:38
11F:推 scars: 後台輸出的JSON格式錯了 09/06 01:13
12F:推 brian90191: json object的key要用文字當做鍵值吧 09/06 18:02
13F:→ brian90191: Result、ResultText、ResultMsg 都要加上引號("") 09/06 18:03