有没有办法从 MySQL 像这样解析 JSON
Is there way to parse JSON like this from MySQL
我想从服务器创建一个 PHP API 来解析 JSON 到 Android
不过没关系。
主要问题是我该如何编码
这是我的PHP代码
<?php
include 'includes/conn.php';
$sql = "SELECT * FROM positions ORDER BY priority ASC";
$res = array();
$query = $conn->query($sql);
while($row = $query->fetch_assoc()){
$csql = "SELECT * FROM candidates WHERE position_id='".$row['id']."'";
$cquery = $conn->query($csql);
$cs = array(
'pos_id' => $row['id'],
'pos_des' => $row['description'],
'max_votes' => $row['max_vote']);
while($crow = $cquery->fetch_assoc()){
$fe = array(
'candidates' => array(
'id' => $crow['id'],
'pos_id' => $crow['position_id'],
'firstname' => $crow['firstname'],
'lastname' => $crow['lastname'],
'photo' => $crow['photo'],
'platform' => $crow['platform']
array_push($cs,fe);
)
);
}
array_push($res,$cs);
}
echo json_encode($res);
?>
现在它工作正常但是相反
这个
[{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": {
"id": "1",
"pos_id": "1",
"firstname": "G-9-JAY",
"lastname": "MCARTHUR",
"photo": "",
"platform": ""
}
},
{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": {
"id": "2",
"pos_id": "1",
"firstname": "G-10-JOHN",
"lastname": "MARTIN",
"photo": "",
"platform": ""
}
},
{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": {
"id": "5",
"pos_id": "1",
"firstname": "GRADE 7",
"lastname": "Lang ya",
"photo": "",
"platform": ""
}
},
{
"pos_id": "2",
"pos_des": "President",
"max_votes": "1",
"candidates": {
"id": "3",
"pos_id": "2",
"firstname": "User",
"lastname": "Name",
"photo": "",
"platform": ""
}
},
{
"pos_id": "2",
"pos_des": "President",
"max_votes": "1",
"candidates": {
"id": "4",
"pos_id": "2",
"firstname": "TEST",
"lastname": "USER",
"photo": "",
"platform": ""
}
}
]
我想要这个结果
[{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": [{
"id": "1",
"pos_id": "1",
"firstname": "G-9-JAY",
"lastname": "MCARTHUR",
"photo": "",
"platform": ""
}, {
"id": "2",
"pos_id": "1",
"firstname": "G-10-JOHN",
"lastname": "MARTIN",
"photo": "",
"platform": ""
}, {
"id": "5",
"pos_id": "1",
"firstname": "GRADE 7",
"lastname": "Lang ya",
"photo": "",
"platform": ""
}]
},
{
"pos_id": "2",
"pos_des": "President",
"max_votes": "1",
"candidates": [{
"id": "3",
"pos_id": "2",
"firstname": "User",
"lastname": "Name",
"photo": "",
"platform": ""
}, {
"id": "4",
"pos_id": "2",
"firstname": "TEST",
"lastname": "USER",
"photo": "",
"platform": ""
}]
}
]
总结:我希望用户将 pos_id he/she 分配给职位,例如 MARTIN 是 运行 总裁,所以 MARTIN 应该显示在总裁职位
我怎样才能做到这一点?
你应该推到 $cs['candidates']
,而不是创建一个单独的数组,将 candidates
作为每个候选人的键。
$cs = array(
'pos_id' => $row['id'],
'pos_des' => $row['description'],
'max_votes' => $row['max_vote'],
'candidates' => array());
while($crow = $cquery->fetch_assoc()){
$cs['candidates'][] = array(
'id' => $crow['id'],
'pos_id' => $crow['position_id'],
'firstname' => $crow['firstname'],
'lastname' => $crow['lastname'],
'photo' => $crow['photo'],
'platform' => $crow['platform']
);
}
我想从服务器创建一个 PHP API 来解析 JSON 到 Android 不过没关系。
主要问题是我该如何编码
这是我的PHP代码
<?php
include 'includes/conn.php';
$sql = "SELECT * FROM positions ORDER BY priority ASC";
$res = array();
$query = $conn->query($sql);
while($row = $query->fetch_assoc()){
$csql = "SELECT * FROM candidates WHERE position_id='".$row['id']."'";
$cquery = $conn->query($csql);
$cs = array(
'pos_id' => $row['id'],
'pos_des' => $row['description'],
'max_votes' => $row['max_vote']);
while($crow = $cquery->fetch_assoc()){
$fe = array(
'candidates' => array(
'id' => $crow['id'],
'pos_id' => $crow['position_id'],
'firstname' => $crow['firstname'],
'lastname' => $crow['lastname'],
'photo' => $crow['photo'],
'platform' => $crow['platform']
array_push($cs,fe);
)
);
}
array_push($res,$cs);
}
echo json_encode($res);
?>
现在它工作正常但是相反 这个
[{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": {
"id": "1",
"pos_id": "1",
"firstname": "G-9-JAY",
"lastname": "MCARTHUR",
"photo": "",
"platform": ""
}
},
{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": {
"id": "2",
"pos_id": "1",
"firstname": "G-10-JOHN",
"lastname": "MARTIN",
"photo": "",
"platform": ""
}
},
{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": {
"id": "5",
"pos_id": "1",
"firstname": "GRADE 7",
"lastname": "Lang ya",
"photo": "",
"platform": ""
}
},
{
"pos_id": "2",
"pos_des": "President",
"max_votes": "1",
"candidates": {
"id": "3",
"pos_id": "2",
"firstname": "User",
"lastname": "Name",
"photo": "",
"platform": ""
}
},
{
"pos_id": "2",
"pos_des": "President",
"max_votes": "1",
"candidates": {
"id": "4",
"pos_id": "2",
"firstname": "TEST",
"lastname": "USER",
"photo": "",
"platform": ""
}
}
]
我想要这个结果
[{
"pos_id": "1",
"pos_des": "Reprisentative",
"max_votes": "4",
"candidates": [{
"id": "1",
"pos_id": "1",
"firstname": "G-9-JAY",
"lastname": "MCARTHUR",
"photo": "",
"platform": ""
}, {
"id": "2",
"pos_id": "1",
"firstname": "G-10-JOHN",
"lastname": "MARTIN",
"photo": "",
"platform": ""
}, {
"id": "5",
"pos_id": "1",
"firstname": "GRADE 7",
"lastname": "Lang ya",
"photo": "",
"platform": ""
}]
},
{
"pos_id": "2",
"pos_des": "President",
"max_votes": "1",
"candidates": [{
"id": "3",
"pos_id": "2",
"firstname": "User",
"lastname": "Name",
"photo": "",
"platform": ""
}, {
"id": "4",
"pos_id": "2",
"firstname": "TEST",
"lastname": "USER",
"photo": "",
"platform": ""
}]
}
]
总结:我希望用户将 pos_id he/she 分配给职位,例如 MARTIN 是 运行 总裁,所以 MARTIN 应该显示在总裁职位
我怎样才能做到这一点?
你应该推到 $cs['candidates']
,而不是创建一个单独的数组,将 candidates
作为每个候选人的键。
$cs = array(
'pos_id' => $row['id'],
'pos_des' => $row['description'],
'max_votes' => $row['max_vote'],
'candidates' => array());
while($crow = $cquery->fetch_assoc()){
$cs['candidates'][] = array(
'id' => $crow['id'],
'pos_id' => $crow['position_id'],
'firstname' => $crow['firstname'],
'lastname' => $crow['lastname'],
'photo' => $crow['photo'],
'platform' => $crow['platform']
);
}