Не удается получить доступ к свойствам JSON в ответе HTTP POST

#javascript #json #post #xmlhttprequest

Вопрос:

Я вызываю запрос HTTP POST, ответом являются данные JSON.

ОТПРАВИТЬ запрос:

 const postXHR = new XMLHttpRequest();
postXHR.open('POST', postOptions);
postXHR.setRequestHeader("Accept", "text/json");
postXHR.setRequestHeader("Content-Type", "text/json");
postXHR.onreadystatechange = function() {
    const response = postXHR.response;
    if (response.response) {
        console.log(postXHR.status);
    }
    createNewOptionValues(response);
}
postXHR.send('{"optionName":"optionName46", "platformName":"platformName46","dotDigitalId":3,"googleId":4}');
 

Данные после ответа/JSON:

 {
    "data": {
        "rooftopGoogleOptionId": 99,
        "googleId": 4,
        "dotDigitalId": 3,
        "optionName": "optionName46",
        "optionValue": null,
        "platformName": "platformName46",
        "googleAccount": null,
        "dotDigitalAccount": null,
        "updatedBy": null,
        "updatedAt": null,
        "createdBy": "root",
    },
    "status": 201,
    "message": "success"
}
 

Функция createNewOptionValue должна регистрировать значение свойства в ответе.

 function createNewOptionValues(obj){
    console.log(obj.googleId);
    console.log(obj['googleId']);
}

 

Тем не менее, вывод не определен, при использовании console.log(obj) ответ действительно отображается.

Комментарии:

1. Вам нужно позвонить JSON.parse() , чтобы преобразовать JSON в объект.

2. Это приводило к ошибке «неожиданный конец ввода json», пока я не добавил .data после obj и до .googleId

3. Ни одно из них не должно влиять JSON.parse() на то, работает ли оно.

4. Я понимаю, о чем вы говорите, я просто сообщаю вам, что простое добавление JSON.parse(obj.googleId) в код не решило проблему, вместо этого была выдана ошибка, ошибка исчезла, когда . данные были включены как JSON.parse(obj.data.googleId);

5. Так и должно быть JSON.parse(obj) .

Ответ №1:

Когда вы получаете ответ, он находится в «текстовом» формате (в большинстве случаев), поэтому вам нужно передать этот ответ в JSON.parse для доступа к нему как к объекту JSON.

Добавление всего 1 строки в функцию createNewOptionValues позволит ей работать. Кроме того, вам необходимо получить доступ к obj.data.googleId вместо доступа к obj.googleId

 function createNewOptionValues(obj){
    obj = JSON.parse(obj)
    console.log(obj.data.googleId);
    console.log(obj.data['googleId']);
}