台灣最大程式設計社群網站
線上人數
5434
 
會員總數:246136
討論主題:189720
歡迎您免費加入會員
討論區列表 >> ASP >> ASP 語法擷取回傳的JSON固定格式資料後修改格式及進階取值
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ASP 語法擷取回傳的JSON固定格式資料後修改格式及進階取值
價值 : 100 QP  點閱數:2612 回應數:6
樓主

webtech
初學者
324 135
2041 350
發送站內信

捐贈 VP 給 webtech
請教各位大大,例如他處系統回傳的JSON格式以如下變數中至我方接收頁,
原始JSON字串在還沒運行時就出現如下錯誤訊息,想使用replace都沒法子,請問有什麼方式可順利修改,感謝。

Expected end of statement

jsonstring = "{"TradeID":"0015387459",.....略
----------------^

原始JSON傳回字串(這裡就錯誤碼了):
string = "{"TID":"0015387459","at":"1366","clst":"1366","authtime":"2016/4/26 上午 10:15:44","status":"已處理","close_data":[{"status":"已處理完成","at":"1366","datetime":"2016/4/26 上午 11:49:55"}]}"

修改後字串(預備ASP取值,格式方面,項目名稱雙引號要移除,而數值要增加雙引號,例如 "TID":"0015387459" 變 TID:""0015387459""...等,這樣的格式才可順利取值):
string = "{TID:""0015387459"",at:""1366"",clst:""1366"",authtime:""2016/4/26 上午 10:15:44"",status:""已處理"",close_data:[{status:""已處理完成"",at:""1366"",datetime:""2016/4/26 上午 11:49:55""}]}"

另外,使用如下方語法(參考處:http://chiming1128.blogspot.tw/2011/09/aspjson.html)可順利取得項目值(TID、at、clst、authtime、status),請問有什麼方式可順利取得close_data標籤內的項目值(status、at、datetime),感謝。

Response.Write obj.TID & "<br>"
...等

搜尋相關Tags的文章: [ JSON ] ,
本篇文章發表於2016-04-30 17:10
1樓
回應

彩虹
檢舉此回應
你是接收端的話,用一個變數去接對方傳來的JSON值就好了
這邊是你自己做測試用的嗎?

jsonstring = "{"TradeID":"0015387459",.....略
----------------^


如果對方是用POST或GET方式將JSON傳過來,因為通常接收會是這樣jsonstring= request.form("對方的變數名稱")

還是他是把JSON印在他的頁面上,
然後你你自己手動複製JSON放到變數? (這樣當然會有問題,因為雙引號的地方會出錯)



再麻煩您補充說明一下~
本篇文章回覆於2016-04-30 18:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝彩虹大的回覆,非常抱歉,在下有點筆誤,字串應如下,
該字串會印在頁面上,而如果使用瀏覽器檢視原始碼則內容相同,謝謝。
jsonstring = "{"TID":"0015387459",.....略

這是他處傳來印在頁面上的字串{"TID":"0015387459","at":"1366","clst":"1366","authtime":"2016/4/26 上午 10:15:44","status":"已處理","close_data":[{"status":"已處理完成","at":"1366","datetime":"2016/4/26 上午 11:49:55"}]}

預計使用xmlHTTP.ResponseText 方式取如上字串再分拆個別值運用。
本篇文章回覆於2016-04-30 19:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

彩虹
檢舉此回應
如果你要接收頁面上印出來的JSON
請使用下面的function~



接收JSON後,如果你要處理JSON的陣列,請到這邊下載「ASP JSON Class」,並引入此檔案<!--#include virtual="/aspJSON1.17.asp" -->
http://www.aspjson.com/
這一篇你可以看一下
ASP讀JSON陣列格式
本篇文章回覆於2016-04-30 20:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝彩虹大的提醒,原本想要分段來撰寫,反而造成錯誤,在下實為汗顏,
經由您的指導,果然是手動複製JSON放到變數的問題造成在下第一個問題產生,目前已順利解決取值問題,
而目前又延伸兩個狀況如下,煩請再次撥冗指導,感激不盡。
1)例如:"status":"已處理" 取回變成 status":"???",又例如:"authtime":"2016/4/26 上午 10:15:44" 取回變成 "authtime":"2016/4/26 ?? 10:15:44",中文部分皆變問號,不知是否有修正的方式。
2)依據您提供的ASP JSON Class方式,目前在下成功取得如下數值,但close_data標籤內的項目值(status、at、datetime)則不知如何下語法取值,試了許久猜不出。
Response.Write oJSON.data("TID") & "<br>"
Response.Write oJSON.data("at") & "<br>"
Response.Write oJSON.data("clst") & "<br>"
Response.Write oJSON.data("authtime") & "<br>"
Response.Write oJSON.data("status") & "<br>"
本篇文章回覆於2016-04-30 21:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

彩虹
檢舉此回應
第一個問題:
中文字會變成「?」,通常就是編碼的問題了
1.請先確認對方傳來的編碼是「utf-8」還是「big5」
2.如果是「utf-8」的話,請檢查你的「.asp」檔案文件編碼是不是也是utf-8

第二個問題:
應該是這樣子,由於我現在這台電腦沒有環境,所以你試試看是不是這樣子
Response.Write oJSON.data("close_data").item(0).item("status")
Response.Write oJSON.data("close_data").item(0).item("at")
Response.Write oJSON.data("close_data").item(0).item("datetime")

其實官方有舉例取值得方法,你再細看一下
http://www.aspjson.com/
本篇文章回覆於2016-04-30 23:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝彩虹大的熱心指導,經由您的耐心引導,目前所有的狀況已順利排除,感激不盡。
本篇文章回覆於2016-05-01 17:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.