将数组转换为JSON字符串php

8
我有一个像这样的数组
$prebook=array(
             'sourceCity'=>$_POST['source'], 
             'destinationCity'=>$_POST['dest'],
             'doj'=>$_POST['doj'],
             'routeScheduleId'=>$_POST['routeid'],
              'boardingPoint'=>array(
                  'id'=>$id,
                  'location'=>$location,
                  'time'=>$time
              ),     
              'customerName'=>$_POST['fname'],
              'customerLastName'=>$_POST['lname'],
              'customerEmail'=>$_POST['email'],
              'customerPhone'=>$_POST['mobileno'],
              'emergencyPhNumber'=>$_POST['emc-number'],
              'customerAddress'=>$_POST['address'],
              'blockSeatPaxDetails'=>array(array(
                  'age'=>$_POST['age'][$key],
                  'name'=>$value,
                  'seatNbr'=>$_POST['seat-no'][$key],
                  'Sex'=>$_POST['gender'.$no],
                  'fare'=>$_POST['base-fare'][$key],
                  'totalFareWithTaxes'=>$_POST['amount'][$key],
                  'ladiesSeat'=>$ladies,
                  'lastName'=>$_POST['plname'][$key],
                  'mobile'=>$_POST['mobileno'],
                  'title'=>'Mr',
                  'email'=>$_POST['email'],
                  'idType'=>$_POST['idtype'],
                  'idNumber'=>$_POST['id-number'],
                  'nameOnId'=>$value,
                  'primary'=>true,
                  'ac'=>$ac,
                  'sleeper'=>$sleeper
         )),
                'inventoryType'=>$_POST['invtype']             
           )

我想要得到如下的Json字符串:
```

从这里我希望获得以下Json字符串

```
apiBlockTicketRequest:{"sourceCity":"Hyderabad","destinationCity":"Bangalore","doj":"2016-01-22","routeScheduleId":"6717","boardingPoint":{"id":"2889","location":"Mettuguda,Opp. Mettuguda Church","time":"04:50PM"},"customerName":"jj","customerLastName":"jjj","customerEmail":"shamonsha665@gmail.com","customerPhone":"7779","emergencyPhNumber":"7878","customerAddress":"gjgj","blockSeatPaxDetails":[{"age":"22","name":"hjhj","seatNbr":"G4","Sex":"F","fare":"900","totalFareWithTaxes":"945","ladiesSeat":false,"lastName":"hjhj","mobile":"7779","title":"Mr","email":"shamonsha665@gmail.com","idType":"Aadhar Card","idNumber":"jkjk","nameOnId":"hjhj","primary":true,"ac":false,"sleeper":false}],"inventoryType":"0"}

这是我的代码。
$data =json_encode($prebook);
$json='apiBlockTicketRequest:'.$data;
echo $json;

但是当我使用这个工具验证 JSON 字符串时,会得到以下错误:

期望对象或数组,而不是字符串。[代码 1,结构 1]

错误:字符串应该用双引号括起来。


1
$json = 'apiBlockTicketRequest' . $data; 这就是为什么。 - Hanky Panky
查看预期的 Json 字符串。 - Blessan Kurien
那意味着你要手工制作它吗? - Hanky Panky
1
$json='{apiBlockTicketRequest:'.$data.'}'; 这样写可能更好,尽管自己编写 JSON 通常不是一个好主意。最好让 json_encode 来完成所有工作。 - Rein
但是仍然出现相同的错误。 - Blessan Kurien
显示剩余2条评论
2个回答

18

你在输出中添加apiBlockTicketRequest导致JSON无效

 $json='apiBlockTicketRequest'.$data;

相反,你可以这样做

$json = json_encode(['apiBlockTicketRequest' => $prebook]);

如果您的PHP版本低于5.4,请使用array()代替[] - Robert
但是我不想在字符串的开头和结尾加上 {,因为这个 JSON 是一个 API 服务的请求。当我传递这个 JSON 时,API 会返回一个错误。 - Blessan Kurien
1
抱歉,如果服务要求您生成无效的JSON,请不要使用该服务。 - Hanky Panky
需要在开头使用 {,这样就可以询问关于伪 JSON 而不是 JSON 的内容,就像 @Hanky웃Panky 提到的那样。 - Robert

0

你的代码正确地生成了那个 string,但整个输出的字符串 ($json) 永远不会被解析为 json,只有你编码的 $data 可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接