在PHP中创建JSON
男孩和女孩:)。这是我的问题。 我在数据库中有两个表(用户和注释)。一个用户可以发布一条或多条评论。我想以JSON格式从数据库检索数据。当我检索数据时,我得到如下格式在PHP中创建JSON,php,json,phpmyadmin,Php,Json,Phpmyadmin,男孩和女孩:)。这是我的问题。 我在数据库中有两个表(用户和注释)。一个用户可以发布一条或多条评论。我想以JSON格式从数据库检索数据。当我检索数据时,我得到如下格式 [{"username":"kurtMarko","message":"Kako si mama"},{"username":"kurtMarko","message":"kako si tata"},{"username":"kurtMarko","message":"kako si brate"},{"username":"k
[{"username":"kurtMarko","message":"Kako si mama"},{"username":"kurtMarko","message":"kako si tata"},{"username":"kurtMarko","message":"kako si brate"},{"username":"kurtMarko","message":"kako si sestro"}]
但我想像这样检索数据
[{"username":"kurtMarko","message":[{"Kako si mama"},{"kako si tata"},{"kako si brate"},{"kako si sestro"}]]
你有什么想法、建议吗。每一条评论都会对我有所帮助。非常感谢你。
这是我的密码
require("config.inc.php");
$query = "SELECT comments.message, users.username
FROM comments
LEFT JOIN users ON users.username = comments.username";
try {
$stmt = $db->prepare($query);
$result = $stmt->execute();
} catch(PDOException $ex){
$response["success"] = 0;
$response["message"] = "Database Error!";
die(json_encode($response));
}
$rows = $stmt->fetchAll();
if ($rows) {
$response = array();
foreach ($rows as $row) {
$post["username"]= $row["username"];
$post["message"] = $row["message"];
array_push($response, $post);
}
echo json_encode($response);
} else {
$response["success"] = 0;
$response["message"] = "No Post Available!";
die(json_encode($response));
}
您想要的DB结构使这变得很困难。由于用户名不是数组中的键,因此必须重复搜索整个数组以查找特定用户名所在的位置,这样才能在该用户下追加新消息。为什么不改为:
$arr = array();
foreach($rows as $row) {
$user = $row['username'];
$msg = $row['message'];
$arr[$user][] = $msg;
}
这将给你:
Array (
'Fred' => array('msg1', 'msg2', 'msg3');
'Susie' => array('msg4', 'msg5', ....)
);
您必须为其制作不同的阵列,如下所示:
$response = array();
foreach ($rows as $row) {
$response[$row["username"]]['message'][] = $row["message"]
}
echo json_encode($response);
也许您必须初始化第一个版本,老实说,您不喜欢的第一个版本实际上是更好的版本 您希望按对象对记录进行分组 如果这些值重复出现,这不是问题,也不会造成伤害 通过删除冗余值来缩短
JSON
字符串可能很有诱惑力,但这将使操作对象更加困难
这就是json(JavaScriptObject符号)的全部要点,在您的示例中,每个注释都代表一个对象,这是一个完美的对象图,不要修改它。
{“Kako si mama”},{“Kako si tata”}
它不是json,您不能通过json\u encode>创建它。只有用绳子直接操纵才行。@Cherey:接得好。他可能指的是作为字符串数组的元素而不是对象的“Kako si mama”、“Kako si tat”
。OP您可以确认/拒绝吗?JSON需要一个{key:value}对,因此{key}无效。我希望您的字符串只包含在数组中,例如:[“Kako si mama”、“Kako si tata”、“Kako si brate”、“Kako si sestro”]
。json库应该能够为您做到这一点。可以将值[“Kako si mama”、“Kako si tata”、“Kako si brate”、“Kako si sestro”]
设置为带有关键消息的json。如果我放置$post[“message”]=array()
而不是$post[“message”]=$row[“message”]
,然后放置foreach循环,我会得到我想要的,但我会得到数据库中的用户名。有没有解决方案可以只获取一个用户名和所有消息?很好,但是如果我想要JSONArray,在那里我可以为该消息的每个消息键都设置JSONArray呢?现在,它打印出了“消息”:“消息”:[“Kako si mama”、“Kako si tata”、“Kako si brate”、“Kako si sestro”]
。您将在代码中更改什么以打印“messages:[{“message”:“Kako si mama”},{“message”:“Kako si tata”},{“message”:“Kako si brate”},{“message”:“Kako si sestro”}]
。您有什么想法吗?正如您在这里看到的:,这是工作,可能在$rows数组中有不同之处,请使用print_r()检查!返回null。类似[]。