15

私はJSONPathを見てきましたが、かなりうまくいっているように見えますが、誰かがそれを使ってその使いやすさについてコメントしたり、代替案を推奨したりできるのでしょうか? このようなことを行う JQuery 用のプラグインがあれば、本当に洗練されたものになるでしょう。私はプラグインを検索していて、手ぶらでやってきました。とにかく、JSONPath (私が熱心ではない側面があります) を理解するのに時間を費やす前、または車輪を再発明する前に、誰かがこれについて角度を持っているかどうかを確認しようと思いました...

私が言いたいことを理解してもらうために、次の Javascript オブジェクトを想像してください。

var Characters=[
        {
            id: "CuriousGeorge",
            species:"Monkey",
            mood: "curious",
            appendage: [
                { 
                    type: "hand",
                    side: "left",
                    holding: [ 
                        { id: "Banana" } 
                    ]
                },
                { 
                    type: "hand",
                    side: "right",
                    holding: []
                }, 
                { 
                    type: "foot",
                    side: "left",
                    holding: []
                },
                { 
                    type: "foot",
                    side: "right",
                    holding: [ 
                        { id: "YellowHat" },
                        { id: "Keys" }
                    ]
                }
            ]
        },
        {
            id: "ManInYellowHat",
            species: "Human",
            mood: "angry",
            //...ok, you get it...
        }
    ]

Jquery セレクターのようなもので、より深いオブジェクトにアクセスできたら素晴らしいと思いませんか?

var banana=SomeUtility("Characters holding #Banana").get(0);
var leftHands=SomeUtility("Characters appendage[type=hand][side=left]").get();

(これは世界で最も陳腐なコード例の資格があるかもしれませんが、ちょっと、私の子供たちはこれを見ただけです。NDA のために実際の例を使用することはできません...)

…で、さらに面白いことに、もし私がそんなものを作ったら、誰かがそれを使うだろうか?

4

8 に答える 8

6

JSON Select - JSON 用の CSS ライクなセレクターを確認してください。

于 2011-12-13T15:13:17.620 に答える
4

OK、私はこのプロトタイプを作成しました。ここから入手できます: http://code.google.com/p/jfunk/

それはすでに私にとって有用であることが証明されているので、おそらくゆっくりと改善し、何か良いものにリファクタリングします. しかし、良いフィードバックがあれば、より迅速に動くことができます。ヘルプも歓迎します。

于 2009-05-17T15:09:47.270 に答える
4

間違いなく便利なユーティリティです。

私の意見では、これにアプローチする最善の方法は、あなたが示しているように、css セレクターにできるだけ似ていることです。jqueryのセレクターの実装の内部を調べることをお勧めします。

私は次のようなものを提案します

var banana = object.function(jsonObect, "holding #Banana");
var leftHands = object.function(jsonObject, "appendage[type=hand][side=left]");

あなたの使用例の代わりに。

今後のネイティブ json サポートがこれにどのように影響するかはわかりません...

于 2009-05-14T12:26:28.420 に答える
3

JSPath を使用してみてください - https://github.com/dfilatov/jspath

JSPath は、JSON ドキュメント内のデータをナビゲートして検索できるようにするドメイン固有言語 (DSL) です。JSPath を使用すると、含まれるデータを取得するために JSON の項目を選択できます。

XML の XPath のような JSON の JSPath。

于 2012-11-27T19:13:34.027 に答える
2

Dojoのdojo.getObjectには、このように大まかに機能する機能があり、フェッチするプロパティに「abc」のようなパスを指定できます。

見てみな:

http://api.dojotoolkit.org/jsdoc/1.3/dojo.getObject

配列をあまりよく理解していないと思いますし、あなたが提案しているようなフル機能のセレクター言語が欠けていると思います。

使用法に関しては、私はあなたが提案しているようなセレクター言語をコーディングしましたが、クライアントの場合、配列アドレス指定は特定のオブジェクト構造に非常に独自のものです。

もしあなたがそれを作るなら、私は間違いなくこのようなシステムを使うでしょう、そして私が助けることができる領域を見たならおそらく貢献するでしょう。

于 2009-05-14T15:48:31.523 に答える
1

新しいオプション jQuery-JSONPathがあるようです。まさにあなたが求めているもののようです。

于 2014-08-19T14:53:03.877 に答える
0

あなたが探しているものとは正確には異なりますが、object-scanをチェックしてください。もう少し冗長ですが、はるかに強力で、より多くの (複雑な) ユース ケースをサポートします。これは、それをどのように使用できるかの例です

// const objectScan = require('object-scan');

const Characters = [{ id: 'CuriousGeorge', species: 'Monkey', mood: 'curious', appendage: [{ type: 'hand', side: 'left', holding: [{ id: 'Banana' }] }, { type: 'hand', side: 'right', holding: [] }, { type: 'foot', side: 'left', holding: [] }, { type: 'foot', side: 'right', holding: [{ id: 'YellowHat' }, { id: 'Keys' }] }] }, { id: 'ManInYellowHat', species: 'Human', mood: 'angry' }];

console.log(objectScan(['**.holding.id'], {
  useArraySelector: false,
  abort: true,
  rtn: 'parent',
  filterFn: ({ value }) => value === 'Banana'
})(Characters));
// => { id: 'Banana' }

console.log(objectScan(['**.appendage[*]'], {
  rtn: 'value',
  filterFn: ({ value }) => value.type === 'hand' && value.side === 'left'
})(Characters));
// => [ { type: 'hand', side: 'left', holding: [ { id: 'Banana' } ] } ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.7.1"></script>

免責事項: 私はobject-scanの作成者です

必ず readme を確認してください。その中にたくさんの例があります。

于 2020-11-17T06:34:06.447 に答える