为什么json_encode在我的json对象周围加上方括号?

时间:2017-09-22 10:15:48

标签: php json

我在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": "" } ]

4 个答案:

答案 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格式化了。