2012-02-09 6 views
29

EDIT: У меня есть значок «знаменитого вопроса» с этим вопросом, поэтому я решил, что вернусь к нему и придерживаюсь того, что произошло со мной, прямо на самом верхушке для людей, которые ищут его, чтобы получить ответ немедленно.jQuery.getJSON и jQuery.parseJSON return [object Object]?

В принципе, я был знаком с JSON. JSON - это объект (очевидно), поскольку он содержит всевозможные вещи! Таким образом, я был похож на «Эй, javascript, просто всплыл оповещение со всеми этими данными JSON», ожидая, что он даст мне данные JSON в виде строки. Но javascript этого не делает (это хорошо!), Так что это было похоже на «Эй, так мы показываем объекты, [Object 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. Оповещение (объект) дает мне это, однако:

[object Object] 

добавление dataType: "json" или "text json" просто делает доклад [object Object] на alert(data).

Я бы очень хотел, чтобы это выяснилось, кто-нибудь знает, почему он это делает? Я довольно новичок в jQuery, моя цель - получить массив для каждого из столбцов. Тот же самый код, который я использую, работал на другой странице, на которую он похож, и это то, что меня больше всего беспокоит.

+1

Вы преобразования его в объект и затем вызвать предупреждение с этим объектом. Затем он говорит, что это объект. Все работает как надо :) –

ответ

32

Функция 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)); 
+0

Это было быстро, и я чувствую себя глупо. Спасибо всем, вы были самыми быстрыми и дали мне информацию console.log (данные), чтобы вы выиграли ответ! – Rob

+1

@Rob Мы узнаем что-то новое каждый день! –

+0

После поиска 1000 решений это сработало! БЛАГОДАРЯ! – Nopzen

2

Вот как это должно работать. Ваш JSON становится объектом javascript. Затем вы можете манипулировать этим объектом как обычный объект javascript.

data.COLUMNS, например, должен возвращать массив.

10

хочет строковое

var obj = $.parseJSON(JSON.stringify(data)); 
+0

Это помогло мне с отдельной проблемой. благодаря! : D –

2

[object Object] является строка представление объектов JavaScript.

Попробуйте получить доступ к свойствам объекта.

alert(data.COLUMNS[0]); 
4

попробуйте отправить этот объект в console.log. Вы получите более четкое представление о том, что он содержит.

Также, положите dataType: 'json' и удалите parseJSON, потому что это все равно.

+0

Да, когда я знал, что правильно получаю JSON, я заменил его $ .getJSON. – Rob

2

jQuery.parseJSON преобразует строку json в объект json, поэтому alert (obj) покажет вам [object Object], так как это объект.

Если вы хотите увидеть, что obj содержит, используйте console.log(obj), а затем проверьте сообщение журнала консоли.

0

$.getJSON("UI/entidades.json.php", function(data){ 
 
\t result = JSON.stringify(data); 
 
\t alert(result) 
 
\t console.log(result) 
 
})