Как я могу проверить, является ли определенная строка JSON? - PullRequest
0 голосов
/ 12 мая 2011

Я работаю в приложении, которое отправляет мне XML, чтобы я мог работать с данными в нем.Но теперь приложение будет отправлять не только XML, но и 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);
        ...
        ..
    }
})

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Как прокомментировал @Gumbo, вы можете проверить поле заголовка ответа HTTP * Content-Type.Кроме того, вы можете попытаться разобрать его - , но не используйте 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 голосов
/ 12 мая 2011

Если сервер работает правильно, он должен содержать заголовок Content-type, который сообщает вам формат тела ответа. Кроме того, если он способен отправлять ответ в виде двух разных форматов, он должен попытаться обработать заголовок Accept в запросе и отправить формат, указанный клиентом.

Я предлагаю вам взглянуть на JQuery - у него есть средств для обработки подобных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...