我在PHP中有一个函数,如下所示:
public function displayMenuType() {
$stmt = $this->conn->query("SELECT * FROM `Type`") or die($this->conn->error);
$json = array();
if($stmt) {
while($result = mysqli_fetch_all($stmt,MYSQLI_ASSOC)) {
$json = json_encode($result, JSON_PRETTY_PRINT);
}
echo $json;
} else {
return false;
}
}
问题是,输出不像我期望从json对象看到的那样,它全部在一行上,并且由于某种原因在数组/方括号内。我哪里出错了?输出如下:
[ { "ID": "1", "Type": "Classic Starters", "Description": "" }, { "ID": "2", "Type": "Special Starters", "Description": "" }, { "ID": "3", "Type": "Tapas Menu", "Description": "" }, { "ID": "4", "Type": "Speciality Curry Dishes", "Description": "" }, { "ID": "5", "Type": "Healthier Options", "Description": "Using coconut oil or coconut milk, no ghee, no sugars, we present our healthier range of curries." }, { "ID": "6", "Type": "Traditional Curries", "Description": "" }, { "ID": "7", "Type": "Tandoori & Grilled", "Description": "" }, { "ID": "8", "Type": "Biryanis", "Description": "" }, { "ID": "9", "Type": "Stir Fry's", "Description": "Our new range of Stir fry\u2019s, all made with chicken tikka, served with salad & mint sauce." }, { "ID": "10", "Type": "Nanbabs", "Description": "A choice of Stirfry\u2019s made with chicken tikka, served on a fresh nan bread with mint sauce." }, { "ID": "11", "Type": "Vegetarian Side Dishes", "Description": "" }, { "ID": "12", "Type": "Rice & Chips", "Description": "" }, { "ID": "13", "Type": "Rice Box", "Description": "" }, { "ID": "14", "Type": "Breads", "Description": "" }, { "ID": "15", "Type": "Dips & Drinks", "Description": "" } ]
答案 0 :(得分:1)
方括号表示你想要的JSON数组,因为你想要一个json数组的行,我假设。
试试这个:
$obj->name
答案 1 :(得分:0)
很明显的错误是你每次循环都是在写lst[['a']]
#[1] 1
。
然后还构建一个包含所有结果的完整数组,然后完成将其转换为JSON字符串。
$json
答案 2 :(得分:0)
mysqli_fetch_all
返回查询中的所有结果,这些结果将表示为关联数组的数组。方括号是数组语法,因此如果目标是显示JSON实体,则方括号将正确显示。如果没有方括号,JSON解析器单词就会知道如何解释每个对象之间的逗号。
您可以采取一些措施来改进代码,例如附加到数组而不是每次循环覆盖它。
$json = array();
if ($stmt) {
while ($row = mysqli_fetch_assoc($stmt)) {
$json[] = $row;
}
echo json_encode($json);
} else {
return false;
}
答案 3 :(得分:0)
根据其文档mysqli_fetch_all()
返回一组行(数组)。因为此数组具有数字整数连续键,所以它由json_encode()
编码为Javascript数组。生成的JSON中的外部方括号表示此数组。
mysqli_fetch_all()
返回的数组的每个项都是一个数组本身,但由于MYSQLI_ASSOC
参数,它们是关联数组,即它们具有字符串键。此类数组由json_encode()
编码为Javascript对象。它们用JSON中的花括号括起来。 F.E. { "ID": "1", "Type": "Classic Starters", "Description": "" }
参数JSON_PRETTY_PRINT
告诉json_encode()
生成格式良好的JSON,人类可以轻松阅读。但是如果你echo
它在HTML上下文中返回的值然后在浏览器中查看它,那么一切都是徒劳的。浏览器并不关心换行符和空格;它将任何空格序列和换行符渲染为单个空格。
在浏览器中检查页面的源代码,您会看到JSON格式化了。