JSON パスは必ずその構造に従うのでしょうか? Result => Arrays のように、すべてが同じノードを持っています。
その場合、次のように動作します。
function getJsonNodes($json) {
$nodes = array();
$decoded = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \InvalidArgumentException('Invalid JSON String passed to getJsonNodes()');
}
$result = $decoded['result'];
if (is_array($result)) {
$nodes = array_keys($result[0]);
}
return $nodes;
}
使用法は次のようになります。
try {
$nodes = getJsonNodes($json);
} catch (\InvalidArgumentException $e) {
echo $e->getMessage();
}
渡される可能性のある無効な JSON 文字列をキャッチして、出力を混乱させることができることを意味します。
私が述べたように、上記のソリューションは、JSON パスが OP に配置する構造に従っている場合にのみ機能します。
ここで使用中を見ることができます: https://ideone.com/dlvdu2
いずれかの方法で役立つことを願っています。