Что не так с моим JSON? - PullRequest
       20

Что не так с моим JSON?

0 голосов
/ 10 апреля 2010

Кто-нибудь заметил что-то не так с этим JSON? Он проверяется на JSONLint.com, но ни функции синтаксического анализа JSON в Chrome, ни в Firefox не смогут его правильно проанализировать

Есть идеи?

{
        "result": "{\"players\":[{\"name\":\"User 522\",\"turn\":true,\"score\":0},{\"name\":\"User 925\",\"turn\":false,\"score\":5}],\"enableControls\":false}",
        "error": "null",
        "id": "7"
}

Ответы [ 2 ]

3 голосов
/ 10 апреля 2010

Даже если вы, json, выглядите немного странно, это соответствует спецификации json.

Ваша проблема возникает из-за проблемы при определении литералов в Firefox или Chrome. Символ "\" (обратная косая черта) необходимо экранировать обратной косой чертой.

Пример 1:

JSON.parse('{"key":"\""}'); breaks

Пример 2:

JSON.parse('{"key":"\\""}'); works

Так что JSONLint.com прав, а Firefox прав, а Chrome тоже прав.

Вы не столкнетесь с этой проблемой, если будете тестировать с помощью ajax-запроса, потому что экранирование будет обрабатываться автоматически. Вы столкнулись с проблемой, потому что хотите передать строку json как литерал (отсюда и необходимость экранирования)

Надеюсь, это поможет вам.

1 голос
/ 10 апреля 2010

Теперь я вижу, что происходит.result само по себе является встроенной строкой json.

Позвольте мне перегруппироваться и ответить снова.

Ваш сервер здесь не оказывает вам никакой помощи.

Опять же, заданная строка НЕ ​​будет анализироваться, поэтому она не является допустимой строкой JSON.И я не вижу способа помассировать его, чтобы разобрать.

Уверены ли вы, что это возвращаемая строка или, возможно, это визуализация строки из отладчика?

Это недопустимый текст JSON, то естьнесколько неправильно работает литерал JavaScript.

Вы не анализируете литерал, вы анализируете текст, чтобы получить литерал.

Ваш литерал будет лучше представлен как ...

var obj = {
    result: {
        players: [{
            name: "User 522",
            turn: true,
            score: 0
        },
        {
            name: "User 925",
            turn: false,
            score: 5
        }],
        enableControls: false
    },
    error: null,
    id: 7
};

и это эквивалентный текст JSON.Попробуйте разобрать это ..

var json = '{"result":{"players":[{"name":"User522","turn":true,"score":0},{"name":"User925","turn": false,"score":5}],"enableControls":false},"error":null,"id":7}';

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