11

JSONPath の次の部分を検討してください。

{
   "result":[
      {
         "type":"Residence",
         "street":"Piazza di Spagna",
         "city":"-4:0"
      },
      {
         "type":"Residence",
         "street":"test",
         "city":"-4:1"
      }
   ]
}

すべてのノード名のリストを取得することは可能ですか?
たとえば、タイプ、通り、都市のようなリストが必要です。

4

7 に答える 7

1

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

いずれかの方法で役立つことを願っています。

于 2016-02-19T11:42:55.410 に答える
1

次の関数を使用して、すべてのキーを配列形式で出力できます

print_r(array_keys($array));

于 2016-02-17T06:29:47.727 に答える
0

のリストを取得することは可能all the node-namesですか?

$object = json_decode($json);
$json_array = $object->result;
foreach ($json_array as $key => $value) {
    $object_var = get_object_vars($value);
    $object_key = array_keys($object_var);
    var_dump($object_key);//will get all node_names!
}
于 2016-02-20T09:29:08.447 に答える
-1

これを試して

$result[0].type , $result[0].street, $result[0].city
于 2012-09-18T07:26:50.913 に答える
-2

以下のコードを確認してください..うまくいくことを願っています

<?php
$text[]=array(
            result=>array(
                "type"=>"Residence",
                "street"=>"pizza",
                "city"=>"ini"
            ),
            array(
                "type"=>"Residence",
                "street"=>"pizza",
                "city"=>"ini"
            )
        );

echo json_encode($text);
?>
于 2016-02-20T11:14:07.353 に答える