Php 如何序列化JSON对象

Php 如何序列化JSON对象,php,json,serialization,Php,Json,Serialization,我创建了一个演示页面,使用以下代码将关联数组转换为JSON字符串 $test = array("name"=>"test","city"=>"xyz","zipcode"=>"98989"); echo json_encode($test); 我得到以下输出 { "name": "test", "city": "xyz", "zipcode": "98989" } "{ \"name\": \"test\", \"city\": \"

我创建了一个演示页面,使用以下代码将关联数组转换为JSON字符串

$test = array("name"=>"test","city"=>"xyz","zipcode"=>"98989");
echo json_encode($test);
我得到以下输出

{
    "name": "test",
    "city": "xyz",
    "zipcode": "98989"
}
"{
    \"name\": \"test\",
    \"city\": \"xyz\",
    \"zipcode\": \"98989\"
}"
我的预期产出

{
    "name": "test",
    "city": "xyz",
    "zipcode": "98989"
}
"{
    \"name\": \"test\",
    \"city\": \"xyz\",
    \"zipcode\": \"98989\"
}"
因为我在shipstation API中遇到错误“无法反序列化当前JSON对象(例如,{“name\”:“value\”})。如何实现我的预期输出?”

实际代码

$ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);

    curl_setopt($ch, CURLOPT_POST, TRUE);
    $post_fields = array(
                  "orderNumber" => "XXXXXXXXXXXXXXXXXX",
                  "orderDate" => "2015-06-29T08:46:27.0000000",
                  "shipByDate" => "2015-07-05T00:00:00.0000000",
                  "orderStatus" => "awaiting_shipment",
                  "billTo" => array("name"=>"ABCD PVT LTD"),
                  "shipTo" => array("name"=>"XYZ PVT LTD Bombay","company"=>"PTR","street1"=>"301,Park Street","city"=>"Sydney","postalCode"=>"20500","country"=>"Australia","residential"=>true),
                  "items" => array(
                                    array(
                                      "name"=>"PTR Last order by ABC #9999",
                                      "quantity"=>2,
                                      "unitPrice"=>99.99,
                                      "options"=>array("name"=>"SIZE","value"=>"Large"),
                                      "amountPaid"=> 199.98,
                                      "paymentMethod"=>"Credit Card",
                                      "shipDate"=>"2015-07-02"
                                      )
                                    )
                            );
    curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($post_fields));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
       "Content-Type: application/json",
       "Authorization: < Enter your Basic Authorization string here >"
   ));
$ch=curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_头,FALSE);
curl_setopt($ch,CURLOPT_POST,TRUE);
$post_字段=数组(
“订单号”=>“XXXXXXXXXXXXXXXX”,
“订单日期”=>“2015-06-29T08:46:27.0000000”,
“ShippyDate”=>“2015-07-05T00:00:00.0000000”,
“订单状态”=>“等待装运”,
“billTo”=>数组(“名称”=>“ABCD私人有限公司”),
“shipTo”=>数组(“名称”=>“XYZ私人有限公司孟买”、“公司”=>“PTR”、“street1”=>“301,公园街”、“城市”=>“悉尼”、“postalCode”=>“20500”、“国家”=>“澳大利亚”、“住宅”=>真实),
“项目”=>数组(
排列(
“名称”=>“ABC上次订购PTR#9999”,
“数量”=>2,
“单价”=>99.99,
“选项”=>数组(“名称”=>“大小”,“值”=>“大”),
“已付金额”=>199.98,
“付款方式”=>“信用卡”,
“发货日期”=>“2015-07-02”
)
)
);
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($post_fields));
curl_setopt($ch,CURLOPT_HTTPHEADER,数组(
“内容类型:应用程序/json”,
“授权:<在此处输入基本授权字符串>”
));
使用addslashes()php函数

$test = array("name" => "test", "city" => "xyz", "zipcode" => "98989");
$data = json_encode($test);
echo $data = addslashes($data);
使用addslashes()php函数

$test = array("name" => "test", "city" => "xyz", "zipcode" => "98989");
$data = json_encode($test);
echo $data = addslashes($data);

问题是您正在使用json_encode()将数组转换为字符串,但是,我非常确定您只需要删除json_encode()并将数组直接传递到POSTFIELDS参数中

curl_setopt($ch, CURLOPT_POSTFIELDS,$post_fields);
另外,在你最初的信息中,你有“尊重产出”和“预期产出”——我认为这也令人困惑


我相信您的意思是,受尊重的输出是必需的,而不是预期的输出,这是实际的输出。

问题是您正在使用json_encode()将数组转换为字符串,但是,我非常确定您只需要删除json_encode()并将数组直接传递到POSTFIELDS参数中

curl_setopt($ch, CURLOPT_POSTFIELDS,$post_fields);
另外,在你最初的信息中,你有“尊重产出”和“预期产出”——我认为这也令人困惑



我相信你的意思是,受尊重的输出是必需的,而不是预期的输出,这是实际的输出。

请评论以改进我的问题。API不太可能需要该输出。你应该显示抛出错误的代码。@Juhana我已经给出了预期的输出,which API需要。请尝试此
echo json_encode(json_encode($test),json_UNESCAPED_SLASHES);
指定的错误是无法用\“。。。。看起来您已经在尝试向它发送一个已转义的字符串(addslashes)。试着在你的e代码行之后解码json_,你会发现它很好用。要获得更准确的帮助,请提供一个实际的示例。请评论以改进我的问题。API不太可能需要该输出。您应该显示抛出错误的代码。@Juhana我已经给出了API所需的预期输出。请尝试此
echo json_encode(json_encode($test),json_UNESCAPED_SLASHES)您指定的错误是它无法用\“…看起来您已经在尝试向它发送一个已转义的字符串(addslashes)。请在您的e代码行之后尝试json_解码,您会发现它工作正常。要获得更准确的帮助,请提供一个中断的实际示例。但它会返回预期的输出。很抱歉,我没有喝咖啡yep@ka_lin:请使用2个杯子:p@ka_lin:没问题,亲爱的。没问题。但是它返回了预期的输出。很抱歉,我还没有收到多汁咖啡yep@ka_lin:请使用2个杯子:p@ka_lin:没问题,亲爱的。没问题。我希望得到我建议的预期输出。如果任何API都希望字符串化JSON对象作为其有效负载,我会感到非常惊讶。检查文档链接我也检查了您提供的代码,但出现了错误。好的,我检查了API,它确实喜欢您最初的做法是正确的。他们网站上的API会误导您,因为它会在字符串中显示JSON。您是在回显API给您的响应吗?我希望验证我的建议的预期输出。如果任何API都希望字符串化JSON对象作为其有效负载,我会非常惊讶。请查看文档链接我也检查了你提供的代码,但是出错了好吧,所以我检查了API,它确实像你最初做的那样是正确的。他们网站上的API误导你,因为它在字符串中显示JSON。你是否回显API给你的响应?