2009-09-30 11 views
1

Je dispose d'un fichier JSON/flux, je voudrais pouvoir faire de sélection de style SQLfiltre JSON (comme SQL SELECT)

est donc ici la file

le fichier contient toutes les données dont je dispose, Je voudrais être en mesure de montrer, et encore dit:

tous les: odeu_nom et odeu_desc qui est: categorie = Feuilles

si vous pouvez le faire avec PHP et JSON (eval) bien ... dire moi comment ...

d'autre part en sql je ferai: SELECT * from $json where categorie=Feuilles

p.s. J'ai trouvé: jsonpath qui est un xpath pour json ... peut-être une autre option?

p.s. # 2 ... avec quelques recherches, j'ai trouvé une option anoter, le json est le même qu'un tableau, peut-être que je peux filtrer le tableau et juste retourner celui dont j'ai besoin? ... comment puis-je faire cela?

Répondre

1

Il est plus logique d'essayer de coller avec des sélecteurs de style XPath (comme jsonpath), plutôt que d'utiliser SQL, même si vous êtes plus familier avec SQL. L'avantage du "chemin" est qu'il exprime plus facilement la structure hiérarchique implicite de XML/JSON, par opposition à SQL qui nécessite d'utiliser différentes jointures pour l'aider à "sortir de sa prison rectangulaire/tabulaire". . Bien que je n'aie jamais utilisé jsonpath, en lisant sa page récapitulative, je crois que ce qui suit devrait produire tous les odeu_nom pour les objets dont la catagorie est 'Feuilles' (étant donné l'entrée json référencée dans la question).

$.Liste_des_odeurs[?(@.categorie = 'Feuilles'].odeu_nom 

qui correspondent à la XPath suivante

/Liste_des_odeurs[categorie='Feuilles']/odeu_nom 

Et le tour est joué ... BTW, 'Jazz n'est pas mort, ça sent juste drôle' (F Zappa)

+0

ya, mais il difficile de sous-ensemble (seulement avoir le xx = 2) – menardmam

+0

Comment faire, avec xpath sélectionnez * à partir de aaa où bb = "xyz" ... aucune idée! :-( – menardmam

+0

@ marc-andre tout dépend comment aaa et bb seraient compris, mais en supposant que le mapping soit relativement simple, "// aaa [bb = 'xyz']/parent :: *" peut faire. la carte Obj-Rel, par exemple j'ai utilisé // aaa en supposant qu'il peut y avoir des nœuds aaa 'partout', mais un seul/ferait dans d'autres cas etc. – mjv