djr*_*eed 4 php regex json curl preg-replace
我是regex的新手,我正试图从PHP中的cURL请求中获取JSON响应.
我在考虑使用preg_match_all.
编辑:应该提到curl_exec()的完整响应包括头信息,这就是我需要提取JSON的原因.
HTTP/1.1 401 Unauthorized Server: Apache-Coyote/1.1 WWW-Authenticate: Digest realm="", qop="auth", [... etc]
Run Code Online (Sandbox Code Playgroud)
我想要的JSON看起来像这样(跟随所有标题):
{ "requests" :
[ {
"request_id" : 10298,
"name" : "CURL Test2",
"submitter" : "First Last",
"hide" : false,
"priority" : 10,
"tags" : [ "label 2" ],
"body" :
{ "type" : "html", "content" : "" },
"runs" : 0
} ]
}
Run Code Online (Sandbox Code Playgroud)
希望只是抓住花括号之间的所有东西.然而,当我这样做时,它会抓住从第一个开口支架到第一个关闭支架的所有东西.为了扩展性,我只想抓住内部的所有内容,包括第一个左大括号和最后一个右大括号.
从技术上讲,它可以从第一个开始大括号开始并返回所有内容直到响应结束(JSON之后没有任何内容).
思考?
ale*_*lex 13
正则表达式很棒,但绝对不是正确的工具.
有一个功能json_decode()可以为您处理这个问题.
它将结构作为对象返回.您可以通过将第二个参数设置为,将其作为数组返回TRUE.即使PHP没有这个功能,你最好还是编写或使用现有的JSON解析器,而不是试图用正则表达式提取部分.
如果您正在使用标题并需要将主体分成单独的变量,那么您应该执行以下操作,其中$chcurl的实例$result是返回的curl_exec().
$headerLen = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$curlBody = substr($result, $headerLen);`
Run Code Online (Sandbox Code Playgroud)