Erlang:在Json中查找数据

时间:2015-09-12 07:12:40

标签: json parsing erlang

我有一组预定义的键key1,key2 ... key10。 (这些键不会改变)我需要从对应于这些键的json中提取数据。 例如access, token, expires at:

{\"access\": {\"token\": {\"issued_at\": \"2015-09-10T12:03:49.554141\", \"expires\": \"2015-09-10T13:03:49Z\" \"id\": \"dbb60c28daf34b80905883789f698cde\", \"tenant\": {\"description\": null, \"enabled\": true,

如何在不使用json库的情况下提取这些键的值?这是个好主意吗? (我认为解析整个字符串的开销并不值得)

1 个答案:

答案 0 :(得分:0)

我们谈论的JSON有多大?这个JSON是由块提供还是已经整个加载到内存中?如果是,为什么要这么麻烦?你的速度有多快?在开始解决之前,有很多问题要问。在大多数情况下,解析整个JSON应该足够了:

get_from_json(JSON, Path) ->
    path(jiffy:decode(JSON), Path).

path(Obj, []) -> Obj;
path({List}, [Key|Path]) when is_list(List) ->
    case lists:keyfind(iolist_to_binary(Key), 1, List) of
        false -> not_found;
        {_, Obj} -> path(Obj, Path)
    end;
path(_, _) -> not_found.

否则,您可以编写自己的解析器。您甚至可以使用leex或现有JSON解析器(如jsx)作为起点。