0

私は PHP 分野の初心者ですので、私の質問にはご容赦ください。

基本的に、私はかなり大きなjsonファイルを持っています/持っているでしょう。提供されたキーに基づいて単一のエントリを取得するには、ファイルを照会する必要があります。例は次のようになります。

{
"key1" : {value1},
"key2" : {value2},
...,
"keyn" : {valuen}
}

1 回のリクエストで 1 つの値のみを取得する必要があり、パフォーマンスが向上することを願っています。

私の検索から PHP でこの種の処理を処理する基本的な方法は、json_decode()and thenを使用することforeachです。

ただし、このアプローチは、キーの順序と探しているキーに基づいて、ファイル全体を反復処理する必要があるようです。したがって、keyn を探している場合は、基本的に大きなファイルを上から下に読み取る必要があります。(はい、より良い結果を得るために何らかのソートアルゴリズムを使用できます)

しかし、私の理解では、JSON は基本的に HashMap の別の形式であるため、HashMap がget簡単かつ高速に実行できることを考えると、PhP で最高のパフォーマンスを引き出す同様の方法はありますか?

4

4 に答える 4

3

さて、あなたが提供した構造を考えると、オブジェクト全体をループする必要はありません。

を探している場合はkeyn、次のようにします。

$obj = json_decode($input);
echo $obj->keyn;

多分私は明らかな何かを見逃しています。オブジェクト全体を json_decode する必要がないようにしたい場合は、質問はもう少し理にかなっていますが、それはあなたが求めているものではありません。

于 2013-07-29T01:26:40.873 に答える
0

JSON.org から

JSON は、次の 2 つの構造で構築されています。

名前と値のペアのコレクション。さまざまな言語で、これはオブジェクト、レコード、構造体、辞書、ハッシュ テーブル、キー付きリスト、または連想配列として実現されます。値の順序付きリスト。ほとんどの言語では、これは配列、ベクトル、リスト、または >sequence として実現されます。

json_decode()最初に json を使用可能なオブジェクトに変換せずに、json とやり取りすることはできません。しかし、キーを知っていれば、実行後にjson_decode()操作できます (オブジェクトになっているため)。例えば:

<?php
$string = '{"foo": "bar", "cool": "attr"}';
$result = json_decode($string);

// Result: object(stdClass)#1 (2) { ["foo"]=> string(3) "bar" ["cool"]=> string(4) "attr" }
var_dump($result);

// Prints "bar"
echo $result->foo;

// Prints "attr"
echo $result->cool;
?>

このような状況var_dump()print_r()は、あなたの友達です。

于 2013-07-29T01:25:15.037 に答える
-1

ループを使わずに値を見つける魔法のような方法はありません。

私はこれをベンチマークしていません:

これは、一致が見つかった場合にツリー全体の反復を完了する必要なく、問題にアプローチする方法です

$key = 'keyn'
$obj = json_decode(file_get_contents('path/to/your/file'), true);
$len = count($obj);
$match = false;

for($ii = 0; $ii < $len; $ii++){
   $curr = $obj[$ii];
   if($curr == $key) {
     $match = $curr;
   }
   break;
}
于 2013-07-29T01:14:17.203 に答える
-2

PHP では、function: file_get_contents を使用して JSON ファイルを解析できます。すべてのキーと値のペアを確認する必要があります。

于 2013-07-29T01:09:28.570 に答える