JQuery.getJSON и jQuery.parseJSON return [object Object]?
РЕДАКТИРОВАТЬ. Я получил значок "знаменитого вопроса" с этим вопросом, поэтому я решил, что вернусь к нему и придерживаюсь того, что произошло со мной, прямо на самом верхушке для людей чтобы найти ответ сразу.
В принципе, я был новичком в JSON. JSON - это объект (очевидно), поскольку он содержит всевозможные вещи! Таким образом, я был похож на "Эй, javascript, просто всплыл оповещение со всеми этими данными JSON", ожидая, что он даст мне данные JSON в виде строки. Но javascript этого не делает (это хорошо!), Так что это было похоже на "Эй, так мы показываем объекты, [объект Object]".
Что бы я мог сделать, это что-то вроде alert(obj.DATA[0][1])
, и это показало бы мне этот бит объекта.
Я действительно хотел проверить, что я делаю хорошие данные JSON, которые я мог бы проверить с помощью JSON.stringify
.
В любом случае, вернемся к нашим регулярно запланированным вопросам!
Я пытаюсь получить некоторые данные JSON с помощью вызова ajax, но jQuery, похоже, не похож на мой JSON.
если я сделаю что-то вроде:
function init2() {
alert("inside init2");
jQuery.ajax({
url: "/Mobile_ReportingChain.cfm",
type: "POST",
async: false,
success: function (data) {
alert(data);
var obj = jQuery.parseJSON(data);
alert(obj);
}
});
}
Я получаю это как от предупреждения (данных):
{"COLUMNS":["MFIRST_NAME","MLAST_NAME","MMDDL_NAME","MEMPLY_ID","MAIM_NBR","EMPLY_ID"],
"DATA":[
["FNAME1 ","LNAME1 ","MI1 ","000-14-7189","026-0010","000-62-7276"]
,["FNAME2 ","LNAME2 ","MI2 ","000-01-2302","101-1850","000-14-7189"]
,["FNAME3 ","LNAME3 ","MI3 ","000-91-3619","102-1000","000-01-2302"]
,["FNAME4 ","LNAME4 ","MI4 ","000-25-9687","102-1000","000-91-3619"]
]}
который JSONLint говорит, действителен json. alert (obj) дает мне это, однако:
[object Object]
добавление dataType: "json"
или "text json"
просто заставляет сообщать [object Object]
в alert(data)
.
Я бы очень хотел, чтобы это выяснилось, кто-нибудь знает, почему он это делает? Я новичок в jQuery, моя цель - получить массив для каждого из столбцов. Тот же самый код, который я использую, работал на другой странице, на которую он похож, что больше всего меня беспокоит.
Ответы
Ответ 1
Функция alert()
может отображать только строку текста. В качестве единственного параметра он принимает строку или объект. Однако объект будет преобразован в строку, которая может быть отображена.
При извлечении JSON через jQuery метод $.ajax()
будет автоматически анализировать JSON и превращать его в объект JavaScript для вас. Ваша переменная data
- это объект JavaScript, а не строка JSON, как можно было бы ожидать.
Так как alert()
может отображать строки при попытке оповестить ваш объект data
, ваш объект будет преобразован в его строковое представление. Строковое представление объекта JavaScript [object Object]
.
В целях отладки вы можете использовать console.log(data)
. Затем вы можете проверить объект и его содержимое через консоль в инструментах разработчика браузеров.
function init2() {
jQuery.ajax({
url: "/Mobile_ReportingChain.cfm",
type: "POST",
dataType: "json",
async: false,
success: function (data) {
console.log(data);
}
});
}
Если вы по какой-то причине все еще хотите оповестить JSON-данные, вам придется превратить ваш объект data
обратно в строку JSON. Для этого вы можете использовать JSON.stringify
:
alert(JSON.stringify(data));
Ответ 2
он хочет строку
var obj = $.parseJSON(JSON.stringify(data));
Ответ 3
попробуйте отправить этот объект на console.log
. Вы получите более четкое представление о том, что он содержит.
Кроме того, поместите dataType: 'json'
и удалите parseJSON
, потому что это все равно.
Ответ 4
Вот как он должен работать. Ваш JSON становится объектом javascript. Затем вы можете манипулировать этим объектом как обычный объект javascript.
data.COLUMNS
, например, должен возвращать массив.
Ответ 5
[object Object]
- это строковое представление объекта javascript.
Попробуйте получить доступ к свойствам объекта.
alert(data.COLUMNS[0]);
Ответ 6
jQuery.parseJSON
преобразует json-строку в json-объект, поэтому alert (obj) покажет вам [object Object]
, поскольку это объект.
Если вы хотите увидеть, что содержит obj
, используйте console.log(obj)
, а затем проверьте сообщение журнала консоли.
Ответ 7
$.getJSON( "UI/entidades.json.php", function(data){
result = JSON.stringify(data);
alert(result)
console.log(result)
})