2011-03-06 6 views
1

Je cherche à obtenir un peu JSON analysé avec erlang-rfc4627 et aux prises avec les résultats retournésParsing JSON avec Erlang (Erlang-rfc4627 lib)

C'est le JSON:

{ 
    "people": [ 
    {"name": "Toby"} 
    ] 
} 

Utilisation du Erlang-rfc4627 bibliothèque:

{ok, Json, []} = rfc4627:decode("...") 

Je peux décoder bien en Erlang comme:

{obj,[ 
    {"people",[ 
    {obj,[ 
     {"name",<<"Toby">>} 
    ]}, 
    {obj,[ 
     {"name",<<"Blah">>} 
    ]} 
    ]} 
]} 

Mais alors, que se passe-t-il? Comment puis-je faire sortir facilement un groupe de personnes de cette structure? (Ceci est un modèle très simplifié du JSON global).

Y a-t-il une meilleure bibliothèque que je devrais utiliser pour cela?

Mise à jour j'ai remarqué que lors du retrait des tableaux, chaque élément des tableaux a la structure terrible obj enveloppé dedans, ce qui rend le processus de manipulation des tableaux très maladroite.

Pourquoi diable est-ce si complexe à Erlang?

Référence: http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang

Répondre

2

Que diriez-vous:

lookup(K, {obj, PL}) -> proplists:get_value(K, PL). 

Et puis

People = lookup("people", JSON), 
Names = [lookup("name", Obj) || Obj <- People]. 

La meilleure façon généralise cette idée dans une requête compilateur qui peut compiler une requête à une fonction peut ensuite être appliqué à un document JSON. Ce sera beaucoup plus facile si vous voulez ruminer dans les documents JSON tout le temps.

Il est également important de noter que vous ne devriez probablement pas opérer directement sur la structure JSON, mais l'intégrer dans quelque chose d'autre dans le monde d'Erlang.

+1

https://github.com/etrepum/kvc fait de telles requêtes mais ne prend pas actuellement en charge {obj, proplist()}. Serait un patch trivial, cependant. –

+0

Oui, je ne veux surtout pas plonger dans JSON, mais je voudrais convertir quelque chose que je peux faire des choses utiles avec mon application Erlang. –

+0

Toujours aux prises avec la manipulation de tableaux provenant de JSON. –