我进行API调用并尝试将json Response转换为php数组。但是,在使用is_array函数进行检查时,结果表明它不是一个数组。
致电Api
$ch = curl_init("https://api.url.com/value/value");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , "token"));
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result);
Json API调用返回:
[
{
"number":"65",
"Field":"test",
"Name":"test",
"type":"Numeric",
"MaximumLength":128,
"MinimumLength":0,
"Options":"required"
}
]
等等。
我使用
解码它json_decode($result);
然而,像这样检查
if (is_array($result)) {
echo "is array";
} else {
echo "is not an array!";
}
回声"不是数组"。
我检查了json Response和它的有效json代码。 我也试过
json_decode($result, true);
具有相同的结果。
我犯了一些明显的错误吗?
答案 0 :(得分:3)
以下代码段似乎按预期行事(回应1),因此您的JSON有效并且可以正常工作。
$result = '[{"ConditionCode":"1","Field":"test","Name":"test","FieldType":"Numeric","MaximumLength":128,"MinimumLength":0,"Options":"required"}]';
$x = json_decode($result, true);
echo($x[0]["ConditionCode"]);
我猜你刚刚在$ result上运行了json_decode? json_decode没有设置您将其提供给json解码数组的变量的值。它只返回数组,因此您必须将此值分配给另一个变量(在本例中为自身)
尝试
$result = json_decode($result, true);
而不是,
json_decode($result, true);
答案 1 :(得分:0)
您可以使用json_last_error()
和json_last_error_msg()
查看您尝试解析的json的问题。我通常使用GuzzleHttp附带以下json_decode包装器,它在解码失败时抛出异常:
/**
* Wrapper for json_decode that throws when an error occurs.
*
* @param string $json JSON data to parse
* @param bool $assoc When true, returned objects will be converted
* into associative arrays.
* @param int $depth User specified recursion depth.
* @param int $options Bitmask of JSON decode options.
*
* @return mixed
* @throws \InvalidArgumentException if the JSON cannot be decoded.
* @link http://www.php.net/manual/en/function.json-decode.php
*/
function json_decode($json, $assoc = false, $depth = 512, $options = 0)
{
$data = \json_decode($json, $assoc, $depth, $options);
if (JSON_ERROR_NONE !== json_last_error()) {
throw new \InvalidArgumentException(
'json_decode error: ' . json_last_error_msg());
}
return $data;
}