【问题标题】:json returning string instead of objectjson 返回字符串而不是对象
【发布时间】:2012-11-26 18:25:01
【问题描述】:

我有

 $age = implode(',', $wage);   // which is object return:  [1,4],[7,11],[15,11]
  $ww = json_encode($age);

然后我在这里检索它

    var age = JSON.parse(<?php echo json_encode($ww); ?>); 

所以如果我做

   alert(typeof(<?php echo $age; ?>))   // object
   alert(typeof(age))                   //string

在我的情况下 JSON.parse 被重新调整为字符串。

如何让 json 作为对象返回?

编辑:

 var age = JSON.parse(<?php echo $ww; ?>); // didnt work , its something syntax error

【问题讨论】:

  • $ww=json_encode($age) 然后你回显json_encode($ww); 所以真的var age=JSON.parse(&lt;?php echo json_encode(json_encode($age)); ?&gt; 这是你真正想做的吗?
  • 为什么要使用 json_encode 两次?第二次你基本上是在字符串上运行 json_encode,这没有意义,因为 json_encode 在数组\对象上运行并将它们转换为字符串
  • 我按照你告诉我的@Matanya 编辑了我的帖子

标签: php javascript json


【解决方案1】:

implode 返回一个字符串,因此json_encode 将其编码为这样是很自然的。它不能识别已经作为字符串传递的类似 JSON 的数据。

如果要获取对象,则必须将关联数组传递给json_encode

$foo = array(
    1 => 4,
    7 => 11,
    15 => 11
);

echo json_encode($foo); // {1:4,7:11,15:11}

关于$wage 内爆前的样子的信息很少,很难准确地说出你想要得到什么。该结构 ([1,4],[7,11],[15,11]) 是如何成为对象的?每个元组的第一个元素是键吗?这就是我在示例中所假设的,但它可能会关闭。

【讨论】:

  • 但是为什么我的代码中 $age 的类型是对象,而年龄的类型是字符串
  • @peter,你必须看看它生成的代码。您的第一个示例执行typeof([1,4],[7,11],[15,11]),并且数组上的typeof 返回object(简单地说,typeof 返回它作为参数接收的最后一个逗号分隔值的类型)。在第二种情况下,您会得到typeof("[1,4],[7,11],[15,11]"),这绝对是string 文字(注意引号)。
  • typeof("[1,4],[7,11],[15,11]") 没有用双引号
  • @peter,你并没有完全做到这一点,但你做到了var age = JSON.parse("\"[1,4],[7,11],[15,11]\"");,然后是typeof(age)。 (看看你如何调用json_encode 两次,一次调用$wage 以获取$age,然后再次调用$age 以将其放入您的Javascript。)
  • 那么如何解决这个问题呢?删除那些双引号 .thx 以获得帮助
【解决方案2】:
var age = [<?php echo $age; ?>];

【讨论】:

    【解决方案3】:

    一个。您会收到语法错误,因为您需要将字符串括在引号内,如下所示:

    var age = JSON.parse("&lt;?php echo $ww; ?&gt;");

    b.此外,您不需要 JSON.parse。您可以在服务器端已经 json_encoded 后简单地回显 php var:

    var age = &lt;?php echo $ww; ?&gt;;

    JSON.parse 用于将 JavaScript 字符串转换为对象。以PHP字符串为例,一旦构建成JSON,在合适的地方回显就相当于自己编码了。

    【讨论】:

    • 首先我没有看到我在哪里写了你提到的双引号
    • 一个。你没有。你应该有。湾。正如我所说,这是多余的
    • b 变量 age 也是没有 json 解析的字符串
    • 移除了 json 解析,但还是一样,它的字符串是变量 age
    • 请在浏览器中转到view source并将其粘贴到此处,以便我查看它是如何解析的
    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多