سؤال

أقوم بترميز بعض البيانات باستخدام 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). إذا كنت تنوي فقط إرسال النتيجة "من خلال السلك" ، فمن أكثر فاعلية أن تعشها في قائمة بدلاً من تحويلها إلى سلسلة مسطحة.

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