2011-05-12 5 views
0

XML로 데이터를 처리 할 수 ​​있도록 XML을 보내는 응용 프로그램에서 작업하고 있습니다. 그러나 이제 애플리케이션은 다른 변수에 따라 XML뿐만 아니라 JSON을 전송할 것이다.특정 문자열이 JSON인지 어떻게 확인할 수 있습니까?

보낸 내용이 JSON인지 확인할 수있는 방법이 있습니까? typeof 또는 instanceof에 해당하는 문자열이 JSON이라는 것을 알 수 있습니까?

편집 : 나는 아주 나쁜 프로그래밍 된 프레임 워크를 사용하여 제작 된이 응용 프로그램의 유지 보수를 제공하고 있습니다. 지금 "데이터"는 함수의 반환이며 프레임 워크의 좋은 부분을 리팩터링하지 않고도 Content-Type을 얻을 수 없습니다. 몇 달이 걸리 겠지만 지금 당장은 없습니다. 지금

는 :

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

+0

그 XML의 첫 번째 문자가 '<' –

+0

인 경우 typeof는 아마 "string"또는 "text"라고 말할 것입니다. XML과 JSON이 와이어를 통과하여 응답 핸들러의 변하기 쉬운. jquery/javascript에 의한 후 처리 후에 만 ​​JS 고유 배열/객체가됩니다. –

답변

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.

관련 문제