php web services中格式化的json格式

时间:2014-04-23 09:19:03

标签: php json web-services

我是PHP新手。我正在尝试格式化JSON。这是相关的代码:

$query = mysql_query("SELECT * 
FROM  `micards` m
JOIN user u ON m.`mobile` = u.phone");

while ($row = mysql_fetch_assoc($query)) {
    $response["success"] = 1;
    $name = array('name'=>$row["name"],'email'=>$row["email"],'mobile'=>$row["mobile"]);
    $phone[] = array('phone'=>$row["phone"],array('card'=>$name));
    $response["contacts"] = $phone;
}
echo json_encode($response);

我收到了这个输出:

{
  "success": 1,
    "contacts": [{
      "phone": "919898989898",
      "0": {
        "card": {
          "name": "abcd",
          "email": "vwxy@test.com",
          "mobile": "919898989898"
        }
      }
    }, {
      "phone": "919898989898",
      "0": {
        "card": {
          "name": "abcd",
          "email": "rstp@test.com",
          "mobile": "919898989898"
        }
      }
    }, {
      "phone": "8686868686",
      "0": {
        "card": {
          "name": "pan",
          "email": "pnqr@gmail.com",
          "mobile": "8686868686"
        }
      }
    }, {
      "phone": "8686868686",
      "0": {
        "card": {
          "name": "monk",
          "email": "abcd@gmail.com",
          "mobile": "8686868686"
        }
      }
    }]
}

但我希望它是:

{
    "success": 1,
    "contacts": [{
        "phone": "919898989898",
        {
            "card": {
                "name": "abcd",
                "email": "vwxy@test.com",
                "mobile": "919898989898"
            }
        },
        {
            "card": {
                "name": "abcd",
                "email": "rstp@test.com",
                "mobile": "919898989898"
            }
        }
    }],
    [{
        "phone": "8686868686",
        {
            "card": {
                "name": "panky",
                "email": "pnqr@gmail.com",
                "mobile": "8686868686"
            }
        },
        {
            "card": {
                "name": "panky",
                "email": "abcd@gmail.com",
                "mobile": "8686868686"
            }
        }
    }]
}

如何获得上述输出?

4 个答案:

答案 0 :(得分:0)

只需更改此部分:

$phone[] = array('phone'=>$row["phone"],array('card'=>$name));    
$response["contacts"] = $phone;

$response["contacts"][] = array('phone'=>$row["phone"],array('card'=>$name));

答案 1 :(得分:0)

只需复制并粘贴此代码

即可
while ($row = mysql_fetch_assoc($query)) {
    $response["success"] = 1;
    $name = array('name'=>$row["name"],'email'=>$row["email"],'mobile'=>$row["mobile"]);
    $response["contacts"][] = array('phone'=>$row["phone"],array('card'=>$name));
}

答案 2 :(得分:0)

请更改

$phone[] = array('phone'=>$row["phone"],array('card'=>$name)) to 
$phone[] = array('phone'=>$row["phone"],'card'=>$name)
;

答案 3 :(得分:0)

我的猜测是关联数组和打包方式存在问题。您可以尝试像这样组织响应数组:

$response = [
    'success'=>1,
    'contacts'=>[
        'phone'=>$row['phone'],
        'card'=>[
            'name'=>$row['name'],
            'email'=>$row['email'],
            'mobile'=>$row['mobile']
        ]
    ]
];

它应该工作,没有检查出来。