كيفية استخدام Mochijson لتشفير هيكل البيانات في Erlang؟

StackOverflow https://stackoverflow.com/questions/1123589

  •  13-09-2019
  •  | 
  •  

سؤال

أنا أستخدم mochiweb وأنا لا أعرف كيفية استخدام تشفير JSON في التعامل مع هيكل البيانات المعقدة. ما هي الاختلافات بين mochijson و mochijson2؟ هل هناك أي مثال جيد؟ أحصل دائما على الأخطاء التالية:

46> T6={struct,[{hello,"asdf"},{from,"1"},{to,{a,"aa"}}]}.
{struct,[{hello,"asdf"},{from,"1"},{to,{a,"aa"}}]}
47> mochijson2:encode(T6).                                
** exception exit: {json_encode,{bad_term,{a,"aa"}}}
     in function  mochijson2:json_encode/2
     in call from mochijson2:'-json_encode_proplist/2-fun-0-'/3
     in call from lists:foldl/3
     in call from mochijson2:json_encode_proplist/2


39> T3={struct,[{hello,"asdf"},{[{from,"1"},{to,"2"}]}]}.
{struct,[{hello,"asdf"},{[{from,"1"},{to,"2"}]}]}
40> mochijson:encode(T3).                                 
** exception error: no function clause matching mochijson:'-json_encode_proplist/2-fun-0-'({[{from,"1"},{to,"2"}]},
                                                                                           [44,"\"asdf\"",58,"\"hello\"",123],
                                                                                           {encoder,unicode,null})
     in function  lists:foldl/3
     in call from mochijson:json_encode_proplist/2
هل كانت مفيدة؟

المحلول

يعمل Mochijson2 مع سلاسل ثنائيات، قوائم كصفيفات، وفتح فقط UTF-8. Decodes Mochijson ويزفص نقاط رمز Unicode.

لإنشاء بنية عميقة فعلت ما يلي:

2> L = {struct, [{key2, [192]}]}. 
{struct,[{key2,"?"}]}
3> 
3> L2 = {struct, [{key, L}]}.   
{struct,[{key,{struct,[{key2,"?"}]}}]}
4> 
4> mochijson:encode(L2).
[123,"\"key\"",58,
 [123,"\"key2\"",58,[34,"\\u00c0",34],125],
 125]

لذلك إذا قمت بإنشاء بنية البيانات بشكل متكرر باستخدام قوائم، فستكون على ما يرام. لست متأكدا من عدم دعم الهياكل العميقة، لكن لا يبدو أنها لا تكون، على الأقل ليست الطريقة التي تحاول خلقها. ربما يعرف شخص آخر طريقة أكثر ذكاء للقيام بذلك.

يمكنك أيضا التحقق من هذا الموضوع: أمثلة mochijson2!

أو

فيديو تعليمي لبدء تطوير تطبيقات الويب على Erlang

نصائح أخرى

T6={struct, [{hello,"asdf"},{from,"1"},{to, {a,"aa"}} ]}.

يجب أن يكون بدلا من ذلك:

T6={struct, [{hello,"asdf"},{from,"1"},{to, {struct, [{a,"aa"}]}} ]}.

تحتاج الهياكل المتداخلة إلى أن يكون لها نمط "الهيكل" نفسه ككائن المستوى الأعلى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top