【问题标题】:jQuery.getJSON and jQuery.parseJSON return [object Object]?jQuery.getJSON 和 jQuery.parseJSON 返回 [object Object]?
【发布时间】:2012-03-02 09:33:18
【问题描述】:

编辑:我已经获得了这个问题的“著名问题”徽章,所以我想我会回到它,并将发生在我身上的事情贴在人们最尖端的顶部搜索它以立即获得答案。

基本上,我是 JSON 新手。 JSON 是一个对象(显然),因为它包含各种东西!所以我就像“嘿,javascript,只需弹出一个包含所有这些 JSON 数据的警报”,期望它以字符串形式给我 JSON 数据。但是 javascript 并没有这样做(这很好!),所以就像“嘿,这就是我们显示对象的方式,[object Object]”。

我可以做的是像alert(obj.DATA[0][1]) 这样的东西,它会向我展示对象的那一点。

我真正想要的是验证我是否制作了良好的 JSON 数据,我可以通过 JSON.stringify 进行检查。

无论如何,回到我们定期安排的问题!


我正在尝试通过 ajax 调用获取一些 JSON 数据,但 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" 只会让它在alert(data) 报告[object Object]

我真的很想弄清楚这一点,有人知道为什么会这样吗?我是 jQuery 的新手,我的目标是为每一列获取一个数组。我正在使用的相同代码在看起来不同的页面上运行,这是最困扰我的。

【问题讨论】:

  • 您正在将其转换为一个对象,然后使用该对象调用警报。然后它说嘿,这是一个对象。一切正常:)

标签: json jquery


【解决方案1】:

(我知道这是一个 jquery 问题;但请耐心等待一分钟。这样我就可以解释为什么这个问题首先发生在我身上)。 我想填补空白,删除了我的 MySQL 表中的记录(主键是自动递增的。所以当在我的 id 之间删除的记录缺少键时。我虽然有一些机制来显示那些丢失的键。所以我创建了通过循环创建数组的代码然后删除了那些存在的键并回显支持该数组(当然是 json_encode 该数组)。 但令我惊讶的是,我所做的总是最终给了我[object Object]。 这让我很困惑,这就是问题所在。


解决方案:只需重新对齐数组,我的所有问题都消失了。

下面我将举一个简化的例子。

<!DOCTYPE html>
<html>
  <head>
    <script src="../js/jquery/jquery3.x/jquery-3.3.1.min.js"></script>
    <title></title>
    <script type="text/javascript">
      $(function () {
        $('#generate').click(function () {
          $.get('tmp2.php?tab=1', function (data) {
            var retStr = '<table>';
            var par = $.parseJSON(data);
            $(par).each(function () {
              retStr += '<tr><td>' + this + '</td></tr>';
            });
            retStr += '</table>';
            $('#res').html(retStr);
          });
        });
      });
    </script>
  </head>
  <body>
        <input type="button" value="generate" id="generate" />
        <div id="res"></div>
  </body>
</html>

还有控制器

<?php
if (!empty($_GET['tab'])) {
  $ids = array();
  for ($i = 0; $i < 50; $i++)
    $ids[] = $i;
  for ($i = 0; $i < 50; $i = $i + 2)
    unset($ids[$i]);
  // echo json_encode($ids); // this will generate [object Object]
  $res = array();
  foreach ($ids as $key => $value) {
    $res[] = $value;
  }
  echo json_encode($res);
  exit();
}
?>

【讨论】:

    【解决方案2】:

    它想要一个字符串

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        alert() 函数只能显示一串文本。作为它的唯一参数,它需要一个字符串或一个对象。 对象会被转换成可以显示的字符串。

        当通过 jQuery 获取 JSON 时,$.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));
        

        【讨论】:

        • 这很快,我觉得很傻。谢谢大家,你们是最快的,给了我console.log(data)的信息,所以你们赢了!
        • @Nopzen 很高兴它对你有帮助!
        【解决方案5】:

        jQuery.parseJSON 会将 json 字符串转换为 json 对象,因此 alert(obj) 将显示 [object Object],因为它是一个对象。

        如果您想查看obj 包含的内容,请使用console.log(obj),然后查看控制台日志消息。

        【讨论】:

          【解决方案6】:

          尝试将该对象发送到console.log。您会更清楚地了解其中包含的内容。

          另外,输入dataType: 'json' 并删除parseJSON,因为它们都是一样的。

          【讨论】:

          • 是的,一旦我知道我正确获取了 JSON,我将其替换为 $.getJSON。
          【解决方案7】:

          [object Object] 是 javascript 对象的字符串表示形式。

          尝试访问对象的属性。

          alert(data.COLUMNS[0]);
          

          【讨论】:

            【解决方案8】:

            这就是它应该如何工作的。你的 JSON 变成了一个 javascript 对象。然后,您可以将该对象作为常规 javascript 对象进行操作。

            data.COLUMNS 例如应该返回一个数组。

            【讨论】:

              猜你喜欢
              • 2013-09-13
              • 2015-01-24
              • 1970-01-01
              • 1970-01-01
              • 2023-03-06
              • 1970-01-01
              • 2015-07-16
              • 2022-01-19
              • 2014-06-07
              相关资源
              最近更新 更多