使用 php(特定格式的 JSON)解析 JSON 请求


Parsing JSON request with php (JSON in specific format)

我正在尝试从以下 JSON URL 获取结果部分中的indications_and_usage部分:https://api.fda.gov/drug/label.json?search=levodopa

直到现在,我有

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$data = curl_exec($ch);
curl_close($ch);

在我的 PHP 文件中。当我回显$data时,它会给出整个 json 作为输出。如何修改此部件以获得indications_and_usage部件?

由于所有方法似乎都不起作用,这是我这样做时的开始输出

echo $data;
HTTP/1.1 200

已建立连接 HTTP/1.1 200 OK 访问控制允许标头:X 请求与访问控制允许来源:* 年龄:0 缓存控制:公共,最大年龄=60 内容安全策略:默认 src 'none' 内容类型:application/json; charset=utf-8 日期:2016 年 2 月 21 日星期日 19:49:27 GMT ETag:W/"19923-bQuoDHROKCsX/qDsyE4GuA" 服务器:openresty 变化:接受编码 变化:接受编码 变化:接受编码 通过: http/1.1 api-umbrella (ApacheTrafficServer [cSsSfU]) X-Cache: MISSX-内容类型选项:嗅探 X-帧选项:拒绝 X-XSS 保护:1;mode=block 内容长度: 104739 连接: 保持活动状态 { "meta": { "免责声明": "openFDA 是一个测试研究项目,不用于临床使用。虽然我们尽一切努力确保数据准确,但您应该假设所有结果都未经验证。 , "许可证": "http://open.fda.gov/license", "last_updated": "2016-02-05", "结果": { "跳过": 0, "限制": 1, "总计": 1400 } }, "结果": [ { "effective_time": "20120305", "drug_interactions": [ "药物相互作用 很少收集到安非他酮与其他药物同时给药后代谢的系统数据, 或者,伴随施用安非他酮对其他药物代谢的影响。.....等等

你必须删除curl_setopt($ch, CURLOPT_HEADER, 1); 形成你的卷发。否则,http 标头包含在变量$data中。

完整示例代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
$result = json_decode($data, true);
$result_string = $result['results'][0]['indications_and_usage'][0];
echo $result_string;
$json = file_get_contents("https://api.fda.gov/drug/label.json?search=levodopa");
$obj = json_decode($json);
echo "<pre>";
print_r($obj->results[0]->indications_and_usage);
echo "</pre>";

如果你对整个对象进行print_rvar_dump,你会看到results是它的成员之一,一个数组。结果数组的第一个索引是另一个对象,该对象具有所需的indications_and_usage成员。

您应该能够通过以下方式访问它:

$decoded = json_decode($data, true);

echo $decoded->results[0]->indications_and_usage[0]