Mochijson2 أو Mochijson
سؤال
أقوم بترميز بعض البيانات باستخدام Mochijson2. لكنني وجدت أنه يتصرف غريب على الأوتار كقوائم.
مثال:
Mochijson2: Encode ("Foo").
[91,"102",44,"111",44,"111",93]
حيث "102" ، "111" ، "111" هي $ f ، $ o ، $ o مشفرة لأن السلاسل 44 هي الفواصل و 91 و 93 هي brakets مربعة.
بالطبع إذا قمت بإخراج هذا في مكان ما ، فسأحصل على سلسلة [102،111111] وهو أمر من الواضح أنه ليس هذا ما أنا عليه.
إذا حاولت
Mochijson2: encode (<< "foo" >>).
34 ، << "فو" >> ، 34
لذا أحصل مرة أخرى على قائمة من اثنين من اثنين من quequotes والجزء الثنائي يمكن من خلالها ترجمة إلى ثنائي مع list_to_binary/1
هذا هو السؤال - لماذا هو غير متسق للغاية. أنا أفهم أن هناك مشكلة في تمييز قائمة Erlang التي يجب ترميزها على أنها مجموعة JSON وسلسلة Erlang التي يجب ترميزها كسلسلة JSON ، ولكن على الأقل يمكن أن تنتج ثنائية عندما أقوم بتمريرها ثنائيًا؟
والسؤال الثاني: يبدو أن Mochijson يخرج كل شيء لطيف (لأنه يستخدم Tuple الخاص لتعيين المصفوفات {Array ، ...})
Mochijson: encode (<< "foo" >>).
"" foo ""
ما هو الفرق بين Mochijson2 و Mochijson؟ أداء؟ معالجة Unicode؟ هل من شيء آخر؟
شكرًا
المحلول
أظن أن القرار في Mochijson هو أنه يعامل ثنائيًا كسلسلة ، وأنه يعامل قائمة من الأعداد الصحيحة كقائمة من الأعداد الصحيحة. (الأمم المتحدة؟) لحسن الحظ الأوتار في إرلانج هي في الواقع قائمة من الأعداد الصحيحة.
ونتيجة لذلك ، تُترجم "Foo" ، أو بعبارة أخرى ، [102،111111] إلى نص يمثل [102،11111]. في الحالة الثانية ، تصبح سلسلة << "foo" >> "foo"
فيما يتعلق بالسؤال الثاني ، يبدو أن Mochijson يعيد دائمًا سلسلة ، في حين أن Mochijson2 يعيد يوداتا يكتب. Iodata هي أساسا قائمة متكررة من الأوتار والثنائيات واليوداتا (في الواقع Iolists). إذا كنت تنوي فقط إرسال النتيجة "من خلال السلك" ، فمن أكثر فاعلية أن تعشها في قائمة بدلاً من تحويلها إلى سلسلة مسطحة.