【问题标题】:Confusion around bracketed objects [{"a":"b"}] and non-bracketed objects {"a":"b"} in PHPPHP 中括号对象 [{"a":"b"}] 和非括号对象 {"a":"b"} 的混淆
【发布时间】:2016-03-17 07:18:57
【问题描述】:

我有一个 AJAX 结果,在返回之前在 PHP 中得到了 json_encode($result);

原来返回的数据是这样的:

[{"ID":"4066","post_title":"TATTOO SLEEVES"}]

注意它有 [ ] 括号!!
然后我会解析JSON数据并使用它。

data = $.parseJSON(data);

但是,我需要返回一个额外的值,所以在返回之前的 AJAX 钩子中我添加了:

$sql_search["sql_search_count"] = $sql_search_count;

现在我的数据突然返回如下:

{"0":{"ID":"4066","post_title":"TATTOO SLEEVES"},"sql_search_count":"1"}

不再有 [] 括号!
我正在尝试拆分这些数据;获取“0”字符串部分,并像以前一样将其推入$.parseJSON(data);。但我似乎无法找到方法。

为什么有时有 [ ] 括号有时没有?

如何在带有 [ ] 的新变量中获取“0”字符串?

我尝试了以下方法:

$sql_search[0]["sql_search_count"] = $sql_search_count;
但这给了我一个错误......

如果我将其更改为 $sql_search[0]->sql_search_count = $sql_search_count; 它可以工作。
但它不是不在顶层,它成为第一个结果的孩子,如下所示:
[{"ID":"4066","post_title":"TATTOO SLEEVES","sql_search_count","1"}]

【问题讨论】:

  • "我正在尝试拆分这些数据;得到 "0" 字符串部分" - 错误!整个是一个JSON,所以把它作为一个整体来解析。
  • 如果您需要返回元素的数量,您可以使用$.parseJSON(data).length 轻松获得该值,而无需添加新参数。
  • 如果数组中有更多条目,您将拥有“1”字符串和“2”字符串。不要直接在数组上设置 sql_search_count。将所有内容包装在某个对象中,例如 { sql_search_count : 1 , results: [ /* your old Array*/ ] }
  • Thilo 怎么做?
  • 您应该创建一个新对象,然后使用 array_push 将其添加到原始对象中,然后您将获得一个包含两个对象的数组。

标签: php json parsing object brackets


【解决方案1】:

$sql_search[0]["sql_search_count"] = $sql_search_count;

在您的 PHP 代码中,它将像以前一样开始工作。缺少括号的原因是

$sql_search["sql_search_count"] = $sql_search_count;

将要求 PHP 将一个名为 sql_search_count 的键包含到 $sql_search 变量中。由于它是一个数组,它直接不能。它将其转换为您现在看到的格式。

【讨论】:

  • 是的,它基本上将数组(注意 [] 括号用于数组)转换为对象(在声明中使用 {} 括号)。
  • 好吧,如果数组没有元素(我假设它可以是 0 和许多),那将无法正常工作。
  • 实际上 @shashanka-n ,$sql_search[0]["sql_search_count"] = $sql_search_count; 给了我一个错误...但是如果我将其更改为 $sql_search[0]->sql_search_count = $sql_search_count; 它将起作用。但它不是在顶层,而是像这样成为第一个结果的孩子:[{"ID":"4066","post_title":"TATTOO SLEEVES","sql_search_count","1"}]。我已经更新了问题。
  • @shashanka n 感谢您的帮助。抱歉,多年后我将其标记为正确。非常感谢您对我的问题的支持! : D
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 2018-04-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 2020-07-10
相关资源
最近更新 更多