2011-05-12 127 views
0

我正在爲向我發送一個XML的應用程序工作,以便我可以使用它中的數據。但是現在,應用程序不僅會發送XML,還會發送JSON,具體取決於其他變量。如何驗證某個字符串是否爲JSON?

有什麼方法可以驗證發送的內容是否是JSON?相當於typeofinstanceof那會告訴我該字符串是一個JSON?

編輯:我在使用非常非常糟糕的編程框架構建的應用程序中進行維護。現在我的「數據」是函數的返回,我不能在不重構框架的很好部分的情況下獲得內容類型 - 這需要幾個月的時間 - 而現在我沒有這個時間。

現在:

ajax.request('POST',function(data){ 
    xml = loadXML(data); // It's always a XML, so I simply load it. 
    ... 
    .. 
}) 

我需要什麼:

ajax.request('POST',function(data){ 
    if(valueCanBeJSON(data)){ // It's not always a XML. How can I do this verification? 
     json = eval('('+data+')'); 
    }else{ 
     xml = loadXML(data); 
     ... 
     .. 
    } 
}) 
+1

服務器應該用* Content-Type *頭域指定響應類型。 – Gumbo 2011-05-12 14:31:39

+0

好吧,如果它的xml的第一個字符將是'<' – 2011-05-12 14:32:14

+0

typeof可能只會說「字符串」或「文本」,因爲這是什麼XML和JSON時,他們穿過電線,並得到填充到您的響應處理程序變量。只有在通過jquery/javascript進行後處理後,它們才能成爲JS本地數組/對象。 – 2011-05-12 14:43:14

回答

1

由於@Gumbo評論,你可以檢查Content-Type HTTP響應報頭字段。或者,您可以嘗試解析它— though don't use eval()。使用JSON.parse()。如果你使用jQuery,$.parseJSON()或者只是$.ajax()(不指定data-type)也可以。

ajax.request('POST', function(data) { 
    var isJSON; 
    try { 
     data = JSON.parse(data); 
     isJSON = true; 
    } 
    catch (e) { 
     isJSON = false; 
    } 

    if (isJSON) { 
     // data is already parsed, so just use it 
    } 
    else { 
     // try treating it as XML 
    } 
}) 
0

如果服務器工作正常,它應該包括一個Content-type頭,告訴您該響應主體的格式。另外,如果它能夠以兩種不同的格式發送響應,則它應該嘗試遵守請求中的Accept標題,併發送客戶端指定的格式。

我建議你看一看JQuery的 - 它有facilities to handle this sort of thing.

相關問題