0

次の方法でサードパーティ サービスからの応答を受信して​​います。

  Array
(
    [created_on] => 2012-09-13 01:47:05
    [recipe] => SAMSave
    [requesters_id] => 1
    [status] => New
    [args] => a:5:{s:4:"name";a:1:{i:0;a:4:{s:10:"first_name";s:5:"Frank";s:9:"last_name";s:7:"McCourt";s:11:"middle_name";s:4:"FAKE";s:5:"email";s:0:"";}}s:3:"dob";a:3:{s:5:"month";s:4:"1955";s:4:"year";s:2:"05";s:3:"day";s:2:"15";}s:3:"ssn";s:9:"411449097";s:7:"address";a:1:{i:0;a:4:{s:6:"street";s:23:"1243 PUBLIC WORKS DRIVE";s:4:"city";s:11:"Chattanooga";s:5:"state";s:2:"TN";s:3:"zip";s:5:"37403";}}s:5:"phone";a:1:{i:0;a:2:{s:6:"number";s:0:"";s:4:"type";s:1:"P";}}}
)
true{"status":"Success","message":"Request Added!","id":416}  

Array から最後まですべて文字列形式です。この文字列からデータを取得する必要があります。毎回、データを取得するための正規表現の解決策が必要になると思います。同じキーと値を持つPHP配列にそれを構築できる関数を知っていたらいいのにと思います。正規表現を使用する以外のより良い解決策がある場合は、考えやコメントを共有してください。

この文字列で unserialize を使用したところ、エラーが発生しました:Error at offset 0 of 654 bytes

受け取った元の応答は 1 行で、上記の出力は で印刷した後にブラウザから取得したもの'<pre>' です。

ありがとう。

4

2 に答える 2

1

シリアル化されたphpデータだけの場合は、これを試してください:

$data = unserialized($string_from_third_party);
于 2012-09-13T06:57:50.650 に答える
1

それがあなたが受け取った正確な応答である場合、誰かがデータを印刷しているように見えます。おそらく、最後に「true」ビットが数回あることもあります。

応答がどのように見えるかは、「args」にあるデータを送信したことと、データが正常に保存されたことを示す応答が返されたことです。

この答えに対する私の考えとして、私はあなたがすでに「args」にデータを持っているという結論に達しました。残りの部分はそれほど重要ではないので、それがあなたが得た正確な応答であるかどうかを言ってください。次に、応答の最後の行を取得し、最初から「true」を削除します。保存に失敗した場合は、最初から「false」を削除することもできます。次に、その行に残っている残りの文字列を使用して、それを json_decode できます。あなたが求めているものを手に入れます。

例として:

// GIVEN: $string_from_server is set to the response
$string_from_server_split_into_lines = str_split($string_from_server, '\n');
$last_line_from_server = array_pop($string_from_server_split_into_lines);
$json_object = json_decode(str_replace('true', '', str_replace('false', '', $last_line_from_server)));
var_dump($json_object);

面倒なことはわかっていますが、あなたがベストショットのようですね。:)

于 2012-09-13T07:13:49.263 に答える