JavaScript - читать Json, если первое значение, если ноль - PullRequest
0 голосов
/ 26 июня 2018

У меня есть файл Json, подобный этому

{
"0":{
    "poperty1":"poperty1",
    "poperty2":"poperty2",
    },
"1":{
    "poperty1":"poperty1",
    "poperty2":"poperty2",
    },
"2":{
    "poperty1":"poperty1",
    "poperty2":"poperty2",
    },
}

И я читаю его с помощью этой функции:

function readJson(){
var rawFile = new XMLHttpRequest();
rawFile.open("GET", "file.json", false);
rawFile.onreadystatechange = function ()
{
    if(rawFile.readyState === 4)
    {
        if(rawFile.status === 200 || rawFile.status === 0)
        {
            // console.log(JSON.parse(rawFile.responseText));
        }
    }
};
rawFile.send(null);
return JSON.parse(rawFile.responseText);
}

Но он возвращает каждое значение, кроме 0

"1":{
    "poperty1":"poperty1",
    "poperty2":"poperty2",
    },
"2":{
    "poperty1":"poperty1",
    "poperty2":"poperty2",
    }

даже если я удаляю и запускаю json с 1, он также возвращает 1.

, так что есть идеи, почему?

1 Ответ

0 голосов
/ 26 июня 2018

Редактировать

Я обновил ваш JSON на github, и я проверил как XHR-ответ, так и проанализированный объект, чтобы проверить, что это правильно, и я могу точно сказать, что этоработает правильно:

function readJson(){
var rawFile = new XMLHttpRequest();
rawFile.open("GET", "https://raw.githubusercontent.com/crisz/file/master/file.json", false);
rawFile.onreadystatechange = function ()
{
    if(rawFile.readyState === 4)
    {
        if(rawFile.status === 200 || rawFile.status === 0)
        {
            console.log(JSON.parse(rawFile.responseText));
        }
    }
};
rawFile.send(null);
// return JSON.parse(rawFile.responseText);
}

readJson();

В предыдущем ответе я не заметил возврата внутри асинхронной функции, если у вас есть сомнения по поводу того, как асинхронные функции работают в Javascript, вы можете проверить thisответить .

Старый ответ

Ваш JSON искажен.Спецификация JSON не ожидает запятой в конце последнего значения ключа набора.

Удалите запятые, и синтаксический анализ будет работать:

{
"0":{
    "poperty1":"poperty1",
    "poperty2":"poperty2"
    },
"1":{
    "poperty1":"poperty1",
    "poperty2":"poperty2"
    },
"2":{
    "poperty1":"poperty1",
    "poperty2":"poperty2"
    }
}

Если при удалении запятых у вас все еще есть проблемы в результирующем объекте, попробуйте протестировать конечную точку API, чтобы убедиться, что ответ соответствует ожидаемому.

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