2011-03-06 86 views
1

我試圖得到一些JSON解析與erlang-rfc4627與返回的結果解析JSON使用Erlang語言(Erlang-rfc4627 LIB)

這掙扎是JSON:

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

使用Erlang的-rfc4627庫:

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

我可以解碼到精二郎爲:

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

但是接下來會發生什麼? 如何以簡單的方式從這個結構中獲得一組人? (這是一個非常簡化的整體JSON模型)。

是否有更好的庫,我應該使用這個?

更新 我注意到拉出陣列時,陣列中的每個元素具有可怕 OBJ結構包裹成它,這使得操縱陣列非常笨拙的過程。

爲什麼地球上這在Erlang中如此複雜?

參考:http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang

回答

2

如何:

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

然後

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

更好的方式推廣這個想法變成一個查詢編譯器可以編譯任何查詢的功能,然後可以應用於JSON文檔。如果您想要始終在JSON文檔內部進行破壞,它將會變得更加輕鬆。

重要的是要注意,你可能不應該直接在JSON結構上運行,而是將它嵌入到Erlang世界中的其他東西中。

+1

https://github.com/etrepum/kvc執行此類查詢,但目前不支持{obj,proplist()}。雖然這將是一個小小的補丁。 – 2011-03-06 16:51:36

+0

是的,我絕對不想潛入JSON,但想轉換成我可以在我的Erlang應用程序中做有用的事情。 – 2011-03-07 02:04:07

+0

仍在努力處理來自JSON的數組。 – 2011-03-07 04:50:24