Разве невозможно просто выполнить побитовую операцию над целым числом?
Поскольку оно должно быть между 0 и 128, если установлен 8-й бит (2 ^ 7), он равен 128 или более. Тем не менее, крайний случай будет болезненным, поскольку вы хотите провести инклюзивное сравнение.
Однажды я использовал erlang-json-eep-parser и попробовал его на ваших данных.
7> json_eep:json_to_term("({ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]})").
** exception error: no match of right hand side value
{error,{1,json_lex2,{illegal,"("}},1}
in function json_eep:json_to_term/1
Верно, скобки не нравятся.
8> json_eep:json_to_term("{ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]}").
** exception error: no match of right hand side value
{error,{1,json_lex2,{illegal,"i"}},1}
in function json_eep:json_to_term/1
И ему не нравятся ключи без кавычек:
18> json_eep:json_to_term("{ \"id1\" : [\"str1\", \"str2\", \"str3\"], \"id2\" : [\"str4\", \"str5\"]}").
{[{<<"id1">>,[<<"str1">>,<<"str2">>,<<"str3">>]},
{<<"id2">>,[<<"str4">>,<<"str5">>]}]}
Так выглядит лучше.
Таким образом, кажется, что ваши данные почти JSON, по крайней мере, в том, что касается этого парсера.
Вы просматривали http://www.json.org/ ?
или загрузили "json4erlang" отсюда: json-and -json-rpc-for-erlang
вы можете работать над вашим JSON на JSONLint валидаторе: http://www.jsonlint.com/