Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > JSON не парсится


Автор: Larrr 26.5.2009, 20:34
Привет,

у меня есть данные в формате http://json.org . Выглядят они так:

Код

{
    "version": "20090518114527",
    "category_levels": [
        {
            "id": "0.0",
            "next_level_nodes": [
                {
                    "id": "0.0.0",
                    "name": {
                        "text": "category:\"bar\"",
                        "display_text": "bar" 
                    },
                    "leaf": true 
                },
                {
                    "id": "0.0.1",
                    "name": {
                        "text": "category:\"čajovna\"",
                        "display_text": "čajovna" 
                    },
                    "leaf": true 
                } 
            ] 
        } 
    ]
}


http://www.jsonlint.com утверждает, что JSON валидный.  При этом когда я пытаюсь его распарсить с помощью eval в js - он не работает. 

Код


try {
        var jsonvar = eval('(' + jsontext + ')');
    //JSON.parse(jsontext)
        alert(jsonvar.version);
    }
    catch(err) {
        alert("invalid Jason");
    }




С другой стороны, если убрать все \", то начинает работать нормально. Проблема в том, что данные формат мне дан свыше и изменить его (те убрать слэши) я не могу. Можно ли его заставить работать так?

Автор: bars80080 26.5.2009, 20:50
Цитата(Larrr @  26.5.2009,  20:34 Найти цитируемый пост)
Проблема в том, что данные формат мне дан свыше и изменить его (те убрать слэши) я не могу.

формат-то дан, а почему слэши нельзя убрать? прямо здесь, перед вставкой в eval?
заменить \" на ' к примеру и всё

Автор: youri 27.5.2009, 04:23
просто вот такой json: ["\""], в виде javascript-строки должен выглядеть так: '["\\""]'

Автор: Larrr 27.5.2009, 13:19
Цитата

формат-то дан, а почему слэши нельзя убрать? прямо здесь, перед вставкой в eval?
заменить \" на ' к примеру и всё 


Можно, но есть такой момент. Мне надо убрать только некоторые кавычки - те, которые идут после категорий. Некоторые кавычки должны остаться (для сохранения валидности). 

JS replace интерпретирует \" как кавычку ", то есть получается не "category:\"bar\"" , скажем, а "category:"bar"" и если прогонять его в replace, то символа \ оно не находит . А как его убедить убирать только внутрение, но не внешние кавычки - я не очень представляю. Буду очень благодарна за совет.

Автор: youri 28.5.2009, 06:00
а как этот json попадает в jsontext?

Автор: Larrr 28.5.2009, 16:30
Разобралась.

JSON приходит с удаленного сервера. Причем в строке с этого сервера слэши остаются. Когда же я ту же строку задавала вручную в коде - слэши регекспом не находились.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)