如何使用PHP向json输出添加自定义前缀

I want to add some string before the data derived from mySQL. And output them in JSON. I can fetch out the data from mySQL right for my needs. But I cannot add the prefix string to the right format.

The expected json format

{
    "message": "",//i can do this
    "value": [//but I can't do this the "value":[
        {
            "excName": "Mark",
            "excSup": "chunyun",
            "excId": 20001
        }, {
            "excName": "orion-01",
            "excSup": "orion-01",
            "excId": 20000
        }
     ]
}

PHP

while ($rec_qXcur=mysqli_fetch_assoc($sql_qXcur)){
    $data[] = array(
   "excId"=>$rec_qXcur['exc_id'],
   "excTitle"=>$rec_qXcur['exc_name'],
   "excSup"=>$rec_qXcur['exc_sup']
   );
}
//return json data
echo json_encode($data);

From PHP I got this :

{
"message":"",
//"value":[//this is missing
"0":{//not need
   "excId":"234",
   "excTitle":"Simon Cabaret - Regular Seat ",
   "excSup":"simon"
},
"1":{//not need
   "excId":"245",
   "excTitle":"Simon Cabaret - VIP Seat (01Nov15 - 30Apr16)",
   "excSup":"simon"
}

According to the expected json format. I missed "value":[. I tried adding it to the $data but it's not working.

You are just adding them to data. You need to add them to the value array.

So json_encode() is probably creating an object literal {} because your array has both named elements and sequential elements. Once it only contains sequential elements, json_encode() should (I believe) return an array literal [];

$data = array(
    'message' => 'Your message here',
    'value'   => array()
);

while ($rec_qXcur=mysqli_fetch_assoc($sql_qXcur)){
   $data['value'][] = array(
       "excId"=>$rec_qXcur['exc_id'],
       "excTitle"=>$rec_qXcur['exc_name'],
       "excSup"=>$rec_qXcur['exc_sup']
   );
}

echo json_encode($data);