[問題] JSON轉成Object?

看板Web_Design作者 (1+1≠2)時間10年前 (2015/09/02 20:12), 10年前編輯推噓3(3011)
留言14則, 5人參與, 最新討論串1/1
最近使用一個套件叫 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://www.ptt.cc/bbs/Web_Design/M.1441195965.A.AF5.html

09/02 20:32, , 1F
JSON的規範比JS宣告變數的文法嚴 引號逗號都要注意
09/02 20:32, 1F

09/02 20:33, , 2F
建議var bb = JSON.stringify(aa); JSON.parse(bb)
09/02 20:33, 2F

09/02 20:34, , 3F
後台丟出來的字串 用JSON encoder包 不要自己組
09/02 20:34, 3F
感謝前輩指點,但是透過您所說的方式... 用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

09/03 01:04, , 4F
前端可以使用typeof()確認物件是String或Object
09/03 01:04, 4F

09/03 01:06, , 5F
試試看var bb = JSON.stringify(aa);
09/03 01:06, 5F

09/03 01:06, , 6F
bb = JSON.parse(bb);
09/03 01:06, 6F

09/03 01:09, , 7F
JSON.stringify() 是將JSON Object轉為String
09/03 01:09, 7F

09/03 01:09, , 8F
JSON.parse() 是將JSON String 轉為物件
09/03 01:09, 8F

09/03 18:38, , 9F
有 response的資料? 話說json.net和c#原生轉出來會不太一
09/03 18:38, 9F

09/03 18:38, , 10F
09/03 18:38, 10F

09/06 01:13, , 11F
後台輸出的JSON格式錯了
09/06 01:13, 11F

09/06 18:02, , 12F
json object的key要用文字當做鍵值吧
09/06 18:02, 12F

09/06 18:03, , 13F
Result、ResultText、ResultMsg 都要加上引號("")
09/06 18:03, 13F

09/06 18:04, , 14F
然後可以丟來這裡驗證看看 http://jsonlint.com/
09/06 18:04, 14F
文章代碼(AID): #1LvkUzhr (Web_Design)
文章代碼(AID): #1LvkUzhr (Web_Design)