我有来自mysql的数据并且错误地转换为JSON

时间:2013-04-30 05:01:45

标签: php mysql sql database json

我有下表:

-> +-----+---------+-----+-------+--------------+
-> | 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 个答案:

答案 0 :(得分:5)

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

?>