1

PHP では、動的であり、常にステータスの後にあることを考えると、以下から「取得」を抽出するための正規表現はどうなるでしょうか。

HTTP/1.0 200 OK
Date: Sat, 09 Feb 2013 23:07:09 GMT
Accept-Ranges: bytes
Server: Noelios-Restlet-Engine/1.1.7
Content-Type: application/json;charset=UTF-8
Content-Length: 147
X-Cache: MISS from geonisis-2.eurodns.com
X-Cache-Lookup: MISS from geonisis-2.eurodns.com:80
Via: 1.0 geonisis-2.eurodns.com (squid/3.1.10)
Connection: keep-alive

{"service":"availability","domain":"","timestamp":1360451229,"content":{"domainList":[{"status":"taken","name":""}]}}

以下は、デコードされた json を使用する必要があることを示しています。どうすればこれを達成できますか?

上記は以下を使用して生成されました。

$process = curl_init($host);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($process);
4

5 に答える 5

3

次のように変更して、応答からヘッダーを削除します。

curl_setopt($process, CURLOPT_HEADER, false);

次に、JSON 文字列を次のようにデコードします。

$data = json_decode($curlResponse, true);
于 2013-02-10T10:36:18.917 に答える
2

応答からヘッダーを破棄する場合は、次を使用できます。

$json = '{"service":"availability","domain":"","timestamp":1360451229,
"content":{"domainList":[{"status":"taken","name":""}]}}';
$data = json_decode($json, TRUE);
echo $data['content']['domainList'][0]['status'];
于 2013-02-10T10:31:32.183 に答える
1

なぜヘッダーを気にするのですか?これは JSON 文字列です。デコードするだけで、簡単にアクセスできるオブジェクトが得られます

PHPで:

$jsonobj = json_decode('{"service":"availability","domain":"","timestamp":1360451229,    "content":{"domainList":[{"status":"taken","name":""}]}}');

JavaScriptで:

var jsonobj = JSON.parse('{"service":"availability","domain":"","timestamp":1360451229,"content":{"domainList":[{"status":"taken","name":""}]}}');
于 2013-02-10T10:33:01.920 に答える
1
$string = '
    HTTP/1.0 200 OK
    Date: Sat, 09 Feb 2013 23:07:09 GMT
    Accept-Ranges: bytes
    Server: Noelios-Restlet-Engine/1.1.7
    Content-Type: application/json;charset=UTF-8
    Content-Length: 147
    X-Cache: MISS from geonisis-2.eurodns.com
    X-Cache-Lookup: MISS from geonisis-2.eurodns.com:80
    Via: 1.0 geonisis-2.eurodns.com (squid/3.1.10)
    Connection: keep-alive

    {"service":"availability","domain":"","timestamp":1360451229,"content":{"domainList":[{"status":"taken","name":""}]}}';

$parts = explode("\n", $string);
$json = end($parts);
$data = json_decode($json);

$status = $data->content->domainList[0]->status; die;

echo $status;

編集(質問の更新に基づく):

cURL リクエストから CURLOPT_HEADER 行を削除します。これにより、応答が簡素化され、解析が容易になります。

于 2013-02-10T10:35:04.473 に答える
0

ヘッダーを操作する必要がある場合は、2 つのオプションがあります。

// first: regex
preg_match('~"status":"(.*?)"~i', $return, $match);
// print_r($match);
echo $match[1]; // taken

// second: json encode
$response = explode("\r\n\r\n", $return, 3);
// print_r($response);
$json_object = json_decode($response[2]);
$json_array  = json_decode($response[2], true); // toArray
// echo $json_object->content->domainList[0]->status;
echo $json_array['content']['domainList'][0]['status'];
于 2013-02-10T10:48:50.157 に答える