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

时间:2014-03-19 17:24:55

标签: php arrays json

我在stackoverflow上看到很多线程,人们将数组转换为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);没有显示任何东西

编辑: 我的代码看起来像这个atm。

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');

感谢您的常识

3 个答案:

答案 0 :(得分:2)

将您的代码更新为

$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);
}

答案 1 :(得分:2)

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

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

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

$mysqli->set_charset('utf8');

答案 2 :(得分:0)

您没有按照自己的方式构建阵列。您要添加的每个元素都是在数组中添加 new 行,这是$json[]的作用。您最终会得到一个类似于以下内容的数组:

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

您想要做的是:

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

这将构建您想要的结构。