Json到php数组(json_decode())无效

时间:2018-05-17 11:21:26

标签: php json

我进行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);

具有相同的结果。

我犯了一些明显的错误吗?

2 个答案:

答案 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;
}