【问题标题】:How to serialize JSON object如何序列化 JSON 对象
【发布时间】:2016-09-20 06:52:57
【问题描述】:

我创建了一个演示页面,使用以下代码将关联数组转换为 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\"
}"

因为我收到错误 “无法在 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 >"
   ));

【问题讨论】:

  • 投反对票的人请发表评论以改善我的问题。
  • API 不太可能需要该输出。您应该显示引发错误的代码。
  • @Juhana 我已经给出了 API 所需的预期输出。
  • 试试这个echo json_encode(json_encode($test), JSON_UNESCAPED_SLASHES);
  • 您指定的错误是说它无法使用 \"....在你的 e 代码行之后尝试和 json_decode ,你会发现它工作正常。为了更准确的帮助,请提供一个实际的例子。

标签: php json serialization


【解决方案1】:

使用addlashes() php函数

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

【讨论】:

  • 但是它返回了预期的输出。
  • 对不起,我没喝过咖啡
  • @ka_lin:请使用 2 个杯子。 :p
  • @ka_lin :没问题,亲爱的。没关系。
【解决方案2】:

问题是您使用 json_encode() 将数组转换为字符串,但是,我很确定您只需要删除 json_encode() 并将数组直接传递给 POSTFIELDS 参数。

curl_setopt($ch, CURLOPT_POSTFIELDS,$post_fields);

另外,在您的原始消息中,您有“尊重的输出”和“预期的输出” - 我认为这也令人困惑。

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

【讨论】:

  • 我想要的预期输出
  • 试试我的建议。如果任何 API 都期望字符串化的 JSON 对象作为其有效负载,我会感到非常惊讶。
  • 我还检查了您提供的代码,但出现错误
  • 好的,所以我检查了 API,它实际上就像你最初做的那样是正确的。他们网站上的 API 具有误导性,因为它向您显示了字符串中的 JSON。您是否在回应 API 给您的响应?
猜你喜欢
  • 1970-01-01
  • 2018-09-08
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多