我有一组预定义的键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库的情况下提取这些键的值?这是个好主意吗? (我认为解析整个字符串的开销并不值得)
答案 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
)作为起点。