尝试在PHP中将数组编码为json


Trying to encode an array to json in PHP

我在stackerflow上看到了许多线程,人们将数组转换为json。我非常确信这应该奏效,但事实并非如此。MySQL很好,查询按预期工作:

$json = array();
if($result = $mysqli->query($query)){
    while($row = $result->fetch_array()){
        $json[]["id"] = $row[0];
        $json[]["trivialname"] = $row[1];
        $json[]["chemischername"] = $row[2];
        $json[]["formel"] = $row[3];
    }
    echo $json[0]["id"]; //just for testing.
    echo json_encode($json);
}

抱歉英语不好。

我的问题主要是echo json_encode($json(;不显示任何

编辑:我的密码看起来像这个自动取款机。

if($result = $mysqli->query($query)){
            $json = array();
            while($row = $result->fetch_assoc()){
                $json[]=$row;
                printf("%s (%s) ID: %s, Formel:%s <br>", $row["Trvialname"], $row["Chemischername"], $row["ID"],$row["Formel"]);
            }
            echo json_encode($json);
        }

它向我展示了: Phthalimid (1,2-Benzoldicarboximid) ID: 2, Formel:C8H5NO2 Phthalsäureanhydrid (2-Benzofuran-1,3-dion) ID: 3, Formel:C8H4O3

没有别的!我可以换:

echo json_encode($json);

echo json_encode($json[0]);

它会添加一行:

{"ID":"2","Trvialname":"Phthalimid","Chemischername":"1,2-Benzoldicarboximid","Formel":"C8H5NO2"}

foreach($json[1] as $value){
    echo $value."<br>";
}

将显示除之外的所有内容

echo json_encode($json[1]);

没有。

解决方案

$mysqli->set_charset('utf8');

感谢您的常识

$json = array();
while($row = $result->fetch_assoc()){
    $json[] = $row;
}
echo json_encode($json);

在我的一生中,我永远不会理解为什么PHP用户总是为的每一个小操作编写这么多代码

您也可以尝试json_last_error((,然后将此调用添加到您的mysqli连接代码中

$mysqli->set_charset('utf8');

将代码更新为

$json = array();
if($result = $mysqli->query($query)){
    while($row = $result->fetch_array()){
        $r = array();
        $r["id"] = $row[0];
        $r["trivialname"] = $row[1];
        $r["chemischername"] = $row[2];
        $r["formel"] = $row[3];
        $json[] = $r;
    }
    echo $json[0]["id"]; //just for testing.
    echo json_encode($json);
}

您并没有按照您认为的方式构建数组。添加的每个元素都会向数组中添加一个新行,这就是$json[]所做的。你最终会得到一个数组,看起来像:

array(
    array('id' => 1),
    array('trivialname' => 'foo'),
    # etc.
)

你想做的是:

$json[] = array(
    "id" => $row[0],
    "trivialname" => $row[1],
    "chemischername" => $row[2],
    "formel" => $row[3]
);

这将建立你想要的结构。