duanke6249 2014-10-20 13:14
浏览 357

将json数组合并到json对象中

I have a problem joining a json array into a json object

I run a query to get detail about a selected part which returns only one result (expected). I then run another query to find any parts that are related to the first parent part. this may return none or multiple associated parts. I want my final output to look like this:

{
  "partCode": "P1",
  "description": "The Parent Part",
  "active": "1",
  "partType": "1",
  "partGroup": "BLR",
  "qty": "1",
  "page": "boiler",
  "relatedParts": [
       {
          "partCode": "P2",
          "description": "some related part",
          "active": "1",
          "partType": "1",
          "partGroup": "BLR",
          "qty": "1"
        },
        {
          "partCode": "P3",
          "description": "Another related part",
          "active": "1",
          "partType": "1",
          "partGroup": "BLR",
          "qty": "1"
        }
      ]
}

How do add the related parts[] array into the json{} object?

My queries are:

//parent part
$query= "SELECT * FROM `parts`
  INNER JOIN `partPrice` ON `parts`.`partCode` = `partPrice`.`partCode`
WHERE `parts`.`partCode` = '$part' AND `partPrice`.`active` = 1;";

$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}

$json=array();
$relatedParts=array();

if (mysql_num_rows($result)>0){
    while($row=mysql_fetch_assoc($result)){ 
        $json[]=$row; 
        $json['relatedParts']=$relatedParts;
    }
}

//get MANADTORY related parts
$query= "SELECT parts.*
FROM
  partAssociation
  INNER JOIN parts ON partAssociation.childPart = parts.partCode
WHERE
  partAssociation.parentPart = '$part' AND
  partAssociation.association = 'Requires';";


$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}

$json2=array();

if (mysql_num_rows($result)>0){
    while($row=mysql_fetch_assoc($result)){ 
        $json2[]=$row;

    }
}
$json['relatedParts']=$json2;

echo json_encode( $json);

EDIT: Found a solution probably not perfect but works; Getting the related records first then adding that result to the parent record Would still be interested in any slicker ways of doing this.

//get MANDATORY related parts
$query2 = "SELECT parts.*
FROM
  partAssociation
  INNER JOIN parts ON partAssociation.childPart = parts.partCode
WHERE
  partAssociation.parentPart = '$part' AND
  partAssociation.association = 'Requires';";

//set the holders 
$json=array();
$relatedParts=array();

//get any related records first
$resultRP = mysql_query($query2);
if (!$resultRP) {
  die("Invalid query: " . mysql_error());
}

if (mysql_num_rows($resultRP)>0){
    while($row=mysql_fetch_assoc($resultRP)){ 
        $relatedParts[]=$row;       
    }
}

//get parent record  
$result = mysql_query($query1);
if (!$result) {
  die("Invalid query: " . mysql_error());
}

if (mysql_num_rows($result)>0){
    while($row=mysql_fetch_assoc($result)){ 
        $row['relatedParts']=$relatedParts;
        $json[]=$row;
    }
}


echo json_encode($json);
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
    • ¥30 python代码,帮调试
    • ¥15 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥100 Jenkins自动化部署—悬赏100元