我有下表:
-> +-----+---------+-----+-------+--------------+
-> | id1 | fname | id2 | fname | relationship |
-> +-----+---------+-----+-------+--------------+
-> | 4 | Albaraa | 5 | Sadi | Father |
-> +-----+---------+-----+-------+--------------+
我将以下内容分配给变量 $relations:
$relations = $stmt->fetchAll(PDO::FETCH_ASSOC);
最后,我使用以下命令打印出该变量的 JSON 编码:
echo json_encode($relations);
...我得到以下输出:
[{"id1":"4","fname":"Sadi","id2":"5","relationship":"Father"}]
所以这里有一些关于我得到的输出的问题:
1)您可以看到我的输出似乎不正确,因为它应该是这样的:
[{"id1":"4","fname":"Albaraa","id2":"5","fname":"Sadi","relationship":"Father"}]
为什么它打印不正确,这与表有两列具有相同名称“fname”的事实有关吗?如果有任何关于如何解决此问题的意见,那就太棒了!
2)我很想知道的另一件事是,我实际上想将 JSON 更改为如下所示:
[{"id":"4","name":"Albaraa","id":"5","name":"Sadi","relationship":"Father"}]
是否有一种简单的方法可以将“id1”和“id2”更改为“id”,并将“fname”更改为“name”?
再次,任何对此的意见都将不胜感激!
最佳答案
1) fname
被覆盖。尝试在 SQL 查询中使用不同的别名来匹配字段。
2) 您不应传递精确的名称匹配属性。它们可能会被 JSON 解码器覆盖。最好将它们作为不同的 JSON 部分传递。
[{"id":"4","name":"Albaraa","id":"5","name":"Sadi","relationship":"Father"}]
应该是这样的:
{
"person1":{"id":4,"name":"Albaraa"},
"person2":{"id":5,"name":"Sadi"},
"relationship":"Father"
}
UPDv1:
结果:
-> +-----+---------+-----+--------+--------------+
-> | id1 | fname1 | id2 | fname2 | relationship |
-> +-----+---------+-----+--------+--------------+
-> | 4 | Albaraa | 5 | Sadi | Father |
-> +-----+---------+-----+--------+--------------+
尝试这样转换:
<?php
// $row is sql fetched row.
$person1 = array('id' => $row['id1'], 'name' => $row['fname1']);
$person2 = array('id' => $row['id2'], 'name' => $row['fname2']);
$response = array(
'person1' => $person1,
'person2' => $person2,
'relationship' => $row['relationship']
);
echo json_encode($response);
?>
关于php - 我有来自 mysql 的数据,但错误地转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292457/