2016-10-29 3 views
0

У меня возникает следующая ошибка .. когда я запускаю «earTest: input (« hai »,« 1 »,« 0.1 »)». на оболочке erlang. вы могли бы помочь мне ... (любая проблема с моим кодированием/декодированием?).Ошибка декодирования ERLANG JSON

** exception error: no function clause matching xmerl_ucs:expand_utf8_1(
    {obj,[{data,[{obj,[{"name","hai"}, 
    {"number","1"}, 
    {"marks","0.1"}]}]}]}, 
    [],0 
) (xmerl_ucs.erl, line 435) 

in function xmerl_ucs:from_utf8/1 (xmerl_ucs.erl, line 183) 
in call from rfc4627:unicode_decode/1 (rfc4627.erl, line 323) 
in call from rfc4627:decode/1 (rfc4627.erl, line 258) 
in call from erlTest:outputJ/1 (erlTest.erl, line 10) 

Код:

-module(earTest). 
-export([input/3]). 
-import(rfc4627,[encode/1, decode/1]). 

outputJ(X) -> 
    {ok, Json, _} = rfc4627:decode(X), 
    Airport = rfc4627:get_field(Json, "name", <<>>), 
    Airport. 

input(X,Y,Z) -> 
    Data = [{obj,[{"name",X},{"number",Y},{"marks",Z}]}], 
    JsonData = {obj, [{data, Data}]}, 
    rfc4627:encode(JsonData), 
    outputJ(JsonData). 
+0

вход (X, Y, Z) -> Data = [{OBJ, [{ "Name", X}, { "номер", Y}, { "знаков", Z}]}], JsonData = {obj, [{data, Data}]}, rfc4627: encode (JsonData), outputJ (JsonData). – murty

+0

я вызываю функцию «outputJ (X)» из функции «ввода» после того, как данные были закодированы ... я хочу выполнить кодирование и декодирование и что искать в содержании ... (извините, вопрос сломан, поскольку я сталкиваюсь с некоторой проблемой с отступом) – murty

ответ

1

Вы пытаетесь расшифровать закодированную нон JSON, и вы создали вложенную структуру.

заменить

-module(earTest). 
-export([input/3]). 
-import(rfc4627,[encode/1, decode/1]). 

outputJ(X) -> 
    {ok, Json, _} = rfc4627:decode(X), 
    [Inner_obj] = rfc4627:get_field(Json, "data", <<>>), % extract the inner object 
    Airport = rfc4627:get_field(Inner_obj, "name", <<>>), 
    Airport. 

input(X,Y,Z) -> 
    % Here you are creating a list of one single object element 
    Data = [{obj,[{"name",X},{"number",Y},{"marks",Z}]}], 
    % and you put it in a "container" object, in the data field 
    JsonData = {obj, [{data, Data}]}, 
    % you have to reuse the result of encoding in the decode function! 
    Res = rfc4627:encode(JsonData), 
    outputJ(Res). 
+0

Спасибо вам, сэр, но я все еще получаю ошибку времени выполнения. 13> c (earTest). {ok, earTest} 14> earTest: вход («123», «345», «678»). ** ошибка исключения: нет соответствия правого бокового значения <<>> в функции earTest: outputJ/1 (earTest.erl, line 7) Строка 7: [Inner_obj] = rfc4627: get_field (Json, «Data», <<> >),% извлечь внутренний объект – murty

+0

Спасибо CHARLIE, его работа после того, как я изменил «данные» на «данные». [Inner_obj] = rfc4627: get_field (Json, "data", <<>>) – murty

+0

Извините за опечатку, я не тестировал код перед отправкой. Я редактирую ответ для правильности. – Pascal

Смежные вопросы