Erlang 是一種函數(shù)式編程語(yǔ)言,常用于構(gòu)建分布式系統(tǒng)。JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,已經(jīng)成為現(xiàn)代應(yīng)用程序中的標(biāo)準(zhǔn)數(shù)據(jù)格式之一。在Erlang中,我們可以使用許多庫(kù)來(lái)解析JSON數(shù)據(jù),例如jsx、jiffy、jsone。
-module(json_parser). -export([parse_json/1]). parse_json(JsonStr) ->{ok, Json} = jsx:decode(JsonStr), OuterList = lists:map( fun(Elem) ->InnerList = lists:foldl( fun({Key, Value}, InnerAcc) ->[Key | InnerAcc] end, [], Elem#jsx.object), lists:reverse(InnerList) end, Json#jsx.array), OuterList.
上面的 Erlang 代碼演示了如何使用 jsx 庫(kù)解析 JSON 數(shù)據(jù)。這里的 JSON 數(shù)據(jù)被解析為一個(gè)列表的列表。jsx 還提供另外兩個(gè)函數(shù) encode 和 encode_pretty 用于將 Erlang 的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為 JSON 格式的字符串。
Jiffy 是另一個(gè)流行的 Erlang JSON 庫(kù)。與 jsx 不同,Jiffy 更加高效和緊湊,但不支持 JSON5 和嚴(yán)格模式的 JSON 解析。以下代碼演示如何使用 Jiffy 庫(kù)解析 JSON 數(shù)據(jù):
-module(json_parser). -export([parse_json/1]). parse_json(JsonStr) ->{ok, Json} = jiffy:decode(JsonStr), OuterList = lists:map( fun(Elem) ->InnerList = lists:map( fun({Key, Value}) ->Key end, Elem), InnerList end, Json), OuterList.
最后,我們還可以嘗試使用 jsone 庫(kù)來(lái)解析 JSON 數(shù)據(jù)。
-module(json_parser). -export([parse_json/1]). parse_json(JsonStr) ->{ok, Json} = jsone:decode(JsonStr), OuterList = lists:map( fun(Elem) ->InnerList = [Value || {_, Value}<- jsone:to_list(Elem)], InnerList end, jsone:to_list(Json)), OuterList.
從上面的代碼中可以看出,jsone 將 JSON 數(shù)據(jù)解析為一種 Elixir 數(shù)據(jù)結(jié)構(gòu),所以我們需要通過(guò) jsone:to_list/1 函數(shù)將其轉(zhuǎn)換為列表的列表。