اختر اللغة

مُحَوِّلُ JSON إِلَى TOML

أَدَاةٌ لِتَحْوِيلِ بَيَانَاتِ JSON إِلَى صِيغَةِ TOML. تَدْعَمُ الجَدَاوِلَ المُتَدَاخِلَة، المَصْفُوفَات، وَقِيَمَ التَّارِيخِ وَالوَقْتِ.

Mehmet Demiray (محمد ديميراي) نُشِر آخر تحديث
مشاركة
كتابة الأعداد الصحيحة بفاصلة عشرية

مَا هُوَ تَحْوِيلُ JSON إِلَى TOML؟

يُشِيرُ تَحْوِيلُ JSON إِلَى TOML إِلَى عَمَلِيَّةِ تَرْجَمَةِ بَيَانَاتٍ مَكْتُوبَةٍ بِتَنسِيقِ JSON (JavaScript Object Notation) إِلَى تَنسِيقِ TOML (Tom’s Obvious, Minimal Language). يُسْتَخْدَمُ هَذَا التَّحْوِيلُ فِي حَالَاتٍ عَدِيدَةٍ، أَبْرَزُهَا عِنْدَمَا تَحتاجُ إِلَى تَحْوِيلِ اِسْتِجَابَاتِ وَاجِهَاتِ التَّطْبِيقَاتِ (API) – الّتِي تَكُونُ عَادَةً بِصِيغَةِ JSON – إِلَى هَيْئَةٍ صَالِحَةٍ لِلِاسْتِخْدَامِ كَمِلَفٍّ تَكْوِينِيٍّ مِثْلَ pyproject.toml أَوْ Cargo.toml. كَمَا تَبرُزُ اَلْحَاجَةُ إِلَيْهِ عِنْدَ تَرْحِيلِ مِلَفَّاتِ التَّهْيِئَةِ اَلْقَدِيمَةِ مِنْ JSON نَحْوَ أَدَوَاتٍ حَدِيثَةٍ تَعْتَمِدُ TOML بِشَكْلٍ أَسَاسِيٍّ. تَكمُنُ الفُرُوقُ اَلْبِنَائِيَّةُ اَلرَّئِيسَةُ فِي أَنَّ JSON يَستَخدِمُ اَلْأَقْوَاسَ {} لِتَمثِيلِ اَلْكائِنَاتِ (Objects) وَ [] لِلْمَصفُوفَاتِ، مَعَ اَلْمَفَاتِيحِ اَلْمَحصُورَةِ بَيْنَ عَلَامَاتِ اِقْتِبَاسٍ، بَيْنَمَا يَعتَمِدُ TOML عَلَى جَدَاوِلَ [table] وَمَجْمُوعَاتِ جَدَاوِلَ [[array]] وَصِيغَةِ اَلْمِفْتَاحِ = اَلْقِيمَةِ. كَذَلِكَ يَدعَمُ TOML اَلتَّعْلِيقَاتِ بِوَاسِطَةِ اَلرَّمْزِ #، وَيُمَيِّزُ بِينَ أَنوَاعِ اَلْبَيَانَاتِ مِثلَ التَّوَارِيخِ وَاَلْأَعْدَادِ اَلصَّحِيحَةِ بِدِقَّةٍ، عَلَى عَكسِ JSON اَلَّذِي يَقتَصِرُ عَلَى أَنوَاعٍ أَكثَرَ عُمُومِيَّةً. هَذِهِ اَلِاخْتِلَافَاتُ تَجعَلُ تَحوِيلَ JSON إِلَى TOML خَطوَةً ضَرُوريَّةً لِضَمَانِ قَرَاءةٍ بَشَرِيَّةٍ أَفضَلَ وَتَكَامُلٍ مَعَ اَلنِّظَامِ اَلْبِيئِيِّ لِلُغَاتٍ مِثلَ رَست (Rust) وَبَايثُون (Python).

كَيْفَ يَعْمَلُ مُحَوِّلُ JSON إِلَى TOML؟

يَعمَلُ مُحَوِّلُ JSON إِلَى TOML عَلَى ثَلَاثِ مَرَاحِلَ رَئِيسِيَّةٍ: تَحلِيلُ مُدخَلَاتِ JSON، ثُمَّ تَخطِيطُ اَلْبِنَى البَيَانِيَّةِ إِلَى هَيَاكِلِ TOML، وَمِن ثَمَّ مُعَالَجَةُ اَلْحَالَاتِ اَلْحَدِّيَةِ لِضَمَانِ صِحَّةِ اَلْمُخْرَجَاتِ. فِي اَلْمَرحَلَةِ اَلْأُولَى، يَقرَأُ اَلْمُحَوِّلُ نَصَّ JSON اَلْمُدخَلَ وَيَتَحَقَّقُ مِن سَلَامَتِهِ اَلْبِنَائِيَّةِ؛ فَإذَا اِكتَشَفَ خَطَأً نَحوِيًّا (مِثلَ فَاصِلَةٍ زَائِدَةٍ أَو مِفتَاحٍ غَيرِ مَحصُورٍ بِعَلَامَاتِ اِقتِبَاسٍ)، يُوقِفُ اَلتَّحوِيلَ وَيُبلِغُ اَلْمُستَخدِمَ. بَعْدَ ذَلِكَ، يَنتَقِلُ إِلَى تَخْطِيطِ كُلِّ عُنصُرٍ فِي شَجَرَةِ JSON إِلَى مَا يُقَابِلُهُ فِي TOML: تُصْبِحُ اَلْكائِنَاتُ اَلرَّئِيسَةُ جَدَاوِلَ جَذْرِيَّةً، وَالكائِنَاتُ اَلْمُتَدَاخِلَةُ إِمَّا جَدَاوِلَ فَرعِيَّةً [parent.child] أَوْ مَفَاتِيحَ مُنقَّطَةً parent.child.key، بِنَاءً عَلَى عُمْقِ اَلتَّدَاخُلِ. تَتَحَوَّلُ اَلْمَصفُوفَاتُ فِي JSON إِلَى مَصفُوفَاتٍ فِي TOML إِلَّا إِذَا كَانَت تَحتَوِي عَلَى كَائِنَاتٍ، حَيثُ تُنشِئُ مَجْمُوعَةَ جَدَاوِلَ [[table.array]] لِلحِفَاظِ عَلَى اَلتَّرتِيبِ. تُعَدُّ مُعَالَجَةُ اَلْحَالَاتِ اَلْحَدِّيَةِ جُزءًا حَيَوِيًّا؛ فَقِيمَةُ null فِي JSON – وَالَّتِي لَا نَظِيرَ لَهَا فِي TOML – يَتِمُّ تَخطِيطُهَا عَادَةً إِلَى سَلسِلَةٍ نَصِّيَّةٍ فَارِغَةٍ أَوْ حَذفِ اَلْمِفتَاحِ تَمَامًا. اَلْمَصفُوفَاتُ مُختَلِطَةُ اَلْأَنوَاعِ (مِثلَ أَعدَادٍ وَنُصُوصٍ مَعًا) تُمثِّلُ تَحَدِّيًا؛ فَقَد يَقُومُ اَلْمُحَوِّلُ بِتَوحِيدِهَا إِلَى نَوعٍ نَصِيٍّ أَو يُصدِرُ تَحذِيرًا. كَمَا يَتَعَرَّفُ اَلْمُحَوِّلُ عَلَى سَلَاسِلِ اَلتَّوَارِيخِ اَلْمُتَوافِقَةِ مَعَ ISO 8601 لِتَحوِيلِهَا إِلَى نَوعِ datetime اَلْخَاصِّ ب TOML. بِالإِضَافَةِ إِلَى ذَلِكَ، يَتِمُّ تَرجَمَةُ اَلرُّمُوزِ اَلْخَاصَّةِ (مِثلَ \n) فِي سَلَاسِلِ JSON إِلَى مَا يُقَابِلُهَا فِي تَمثِيلَاتِ TOML اَلنَّصِّيَّةِ اَلْأَسَاسِيَّةِ أَوِ اَلْحَرفِيَّةِ، مِمَّا يَضمَنُ عَدَمَ فُقدَانِ اَلْبَيَانَاتِ أَثنَاءَ اَلنَّقلِ.

حَالَاتُ اسْتِخْدَامِ تَحْوِيلِ JSON إِلَى TOML

يَتَجَلَّى اَستِخدَامُ مُحَوِّلِ JSON إِلَى TOML فِي عِدَّةِ سِينَارِيهَاتٍ عَمَلِيَّةٍ يَومِيَّةٍ لِلمُطَوِّرِينَ. أَوَّلُهَا، تَحوِيلُ اِستِجَابَاتِ وَاجِهَاتِ اَلتَّطبِيقَاتِ (API)؛ فَكَثِيرًا مَا تُرجِعُ اَلخَدَمَاتُ اَلسَّحَابِيَّةُ بَيَانَاتٍ بِتَنسِيقِ JSON، وَلَكِنَّ أَدَاةَ بِنَاءٍ مِثلَ Cargo أَو Hugo تَنتَظِرُ مِلَفَّ تَهيئَةٍ TOML. هُنَا يَتَدَخَّلُ اَلْمُحَوِّلُ لِيَأخُذَ تِلكَ اَلاِستِجَابَةَ وَيُنتِجَ مِلَفَّ تَهيئَةٍ صَالِحًا لِلِاستِخدَامِ مُبَاشَرَةً. ثَانِيهَا، تَرحِيلُ مِلَفَّاتِ اَلتَّهيِئَةِ اَلقَدِيمَةِ؛ فَالكَثِيرُ مِن اَلمَشرُوعَاتِ اَلعَرَبِيَّةِ اَلَّتِي كَانَت تَستَخدِمُ JSON لِضَبطِ إِعدَادَاتِهَا تَتَحَوَّلُ اليَومَ إِلَى TOML لِمَا يُوَفِّرُهُ مِن قَابِلِيَّةٍ لِلقِرَاءَةِ وَدَعمٍ رَسمِيٍّ فِي بِيئَاتٍ مِثلَ بَايثُون (مِن خِلَالِ pyproject.toml) وَرَست. بَدَلًا مِن إِعَادَةِ كِتَابَةِ الإِعدَادَاتِ يَدَوِيًّا، يَقُومُ اَلْمُحَوِّلُ بِتَرجَمَتِهَا بِضَغطَةٍ وَاحِدَةٍ. ثَالِثُ اَلسِّينَارِيهَاتِ هُوَ تَبَادُلُ اَلْبَيَانَاتِ بَينَ أَنظِمَةٍ مُختَلِفَةٍ؛ فَقَد يَكُونُ أَحَدُ اَلنُّظُمِ يُنْتِجُ JSON فَقَط بَينَمَا اَلْآخَرُ يَستَهلِكُ TOML، فَيَعمَلُ اَلْمُحَوِّلُ كَجِسرٍ وَسِيطٍ. كَمَا يَظهَرُ اَلدَّورُ فِي خَطَوطِ اَلتَّكاملِ وَالتَّسلِيمِ اَلْمُستَمِرِّ (CI/CD) عِندَمَا تَكُونُ قَوَالِبُ اَلتَّهيِئَةِ مُخَزَّنَةً بِصِيغَةِ JSON لِسُهُولَةِ اَلتَّوَلِيدِ، لَكِنَّ اَلتَّطبِيقَ اَلهَدَفَ يَطلِبُ TOML لِلتَّشغِيلِ. فِي اَلْمُجتَمَعِ اَلتِّقنِيِّ اَلْعَرَبِيِّ، يُلَاحَظُ تَبَايُنُ اَلاِعتِمَادِ؛ حَيثُ يَستَخدِمُ اَلْكَثِيرُ إِطَارَاتٍ مِثلَ Django وَ FastAPI مَعَ JSON لِلوَاجِهَاتِ، بَينَمَا يَعتَمِدُونَ عَلَى Poetry لِإِدَارَةِ اَلِاعتِمَادَاتِ، مِمَّا يَجعَلُ تَحوِيلَ اَلإِعدَادَاتِ بَينَ اَلنَّمَطَينِ أَمرًا شَائِعًا. وَفِي جَمِيعِ هَذِهِ اَلْحَالَاتِ، يُوفِّرُ مُحَوِّلُ JSON إِلَى TOML اَلْوَقْتَ وَيُقَلِّلُ اَلأَخطَاءَ اَلنَّاتِجَةَ عَنِ اَلتَّحوِيلِ اَليَدَوِيِّ.

الْأَسْئِلَةُ الشَّائِعَةُ حَوْلَ مُحَوِّلِ JSON إِلَى TOML

  • س: كَيْفَ أَقُومُ بِتَحْوِيلِ مُلَفِّ JSON إِلَى TOML؟ ج: اِفْتَحْ مُحَوِّلَ JSON إِلَى TOML، ثُمَّ اِلصَقْ نَصَّ JSON فِي حَقْلِ اَلإِدخَالِ، أَو اِرفَعِ اَلمِلَفَّ مُبَاشَرَةً. سَيَقُومُ اَلْمُحَوِّلُ بِمُعَالَجَةِ اَلنَّصِّ وَإِظهَارِ نَاتِجِ TOML فِي اَلْجِهَةِ اَلْأُخرَى. يُمكِنُكَ نَسخُ اَلنَّاتِجِ أَو تَنزِيلُهُ كَمِلَفٍّ .toml. تَأكَّد مِن صَلَاحِيَةِ JSON أَوَّلًا بِاستِخدَامِ أَدَاةِ تَنسِيقِ JSON إِن دَعَت اَلحَاجَةُ. - س: مَا هِي أَبْرَزُ اَلْفُرُوقَاتِ بَينَ JSON وَ TOML؟ ج: JSON خَفِيفٌ وَمُنَاسِبٌ لِلتَّبَادُلِ، بَينَمَا صُمِّمَ TOML خِصِّيصًا لِلتَهيِئَةِ، مُضِيفًا اَلتَّعلِيقَاتِ وَأَنوَاعَ اَلتَّوَارِيخِ وَقَوَاعِدَ وَاضِحَةً لِلتَبَاعُدِ. كَذَلِكَ يَستَخدِمُ TOML صِيغَةَ key = value مَعَ تَرَاكِيبَ جَدْوَلِيَّةٍ صَرِيحَةٍ، فِي حِينِ يَعتَمِدُ JSON عَلَى اَلْأَقوَاسِ وَالَفَاصِلَاتِ. - س: مَاذَا يَحدُثُ مَعَ اَلتَّرَاكِيبِ اَلْمُتَدَاخِلَةِ أَو اَلأَحرُفِ اَلخَاصَّةِ؟ ج: يَتَعَامَلُ اَلْمُحَوِّلُ مَعَ اَلتَّدَاخُلِ اَلْعَمِيقِ عَن طَرِيقِ إِنشَاءِ جَدَاوِلَ فَرعِيَّةٍ أَو مَفَاتِيحَ مُنقَّطَةٍ، فَمَثَلًا اَلْكَائِنُ { "section": { "key": "value" } } يُصبِحُ [section] مَعَ key = "value". بِالنِّسبَةِ لِلأَحرُفِ اَلخَاصَّةِ، يَستُخدِمُ تَمثِيلَاتِ TOML اَلنَّصِّيَّةَ اَلأَسَاسِيَّةَ لِلتَعَامُلِ مَعَهَا دُونَ فُقدَانٍ. - س: هَل اَلتَّحوِيلُ غَيرُ مُفقِدٍ لِلبَيَانَاتِ؟ ج: فِي اَلغَالِبِ نَعَم، لَكِن هُنَاكَ اِستِثنَاءَاتٌ: قِيمَةُ null لَيسَت مَوجُودَةً فِي TOML فَتُمَثَّلُ بِطُرُقٍ بَدِيلَةٍ، وَاَلمَصفُوفَاتُ مُختَلِطَةُ اَلأَنوَاعِ قَد تَفقِدُ تَميِيزَهَا، وَاَلمِلَفَّاتُ اَلَّتِي تَعتَمِدُ عَلَى اَلتَّعلِيقَاتِ المَخفِيَّةِ (غَيرِ المَوجُودَةِ فِي JSON) لَن تَحتَفِظَ بِهَا. مَعَ ذَلِكَ، لِاِستِخدَامَاتِ اَلتَّهيِئَةِ اَلطَّبِيعِيَّةِ، يَكُونُ اَلتَّحوِيلُ دَقِيقًا. إِذَا كُنتَ تَحتَاجُ إِلَى اَلعَكسِ، فَبِإِمكَانِكَ تَجرِبَةُ مُحَوِّلِ TOML إِلَى JSON.

الاِخْتِلَافَاتُ الْبِنَائِيَّةُ بَيْنَ JSON وَ TOML

تَكمُنُ جُذُورُ اَلاِختِلَافِ بَينَ JSON وَ TOML فِي غَرَضِ كُلِّ مِنهُمَا: JSON وُلِدَ لِلتَّبَادُلِ اَلبَيَانِيِّ اَلسَّرِيعِ عَبْرَ اَلشَّبَكَةِ، بَينَمَا صُمِّمَ TOML لِيَكُونَ قَابِلًا لِلقِرَاءَةِ اَلبَشَرِيَّةِ وَكِتَابَةِ مِلَفَّاتِ اَلتَّهيِئَةِ. يَستَخدِمُ JSON اَلأَقوَاسَ {} وَالَفَوَاصِلَ لِتَعرِيفِ اَلكَائِنَاتِ وَالَمَصفُوفَاتِ، مَعَ إِلزَامٍ بِوَضعِ اَلمَفَاتِيحِ بَينَ عَلَامَاتِ تَنصِيصٍ مُزدَوَجَةٍ. أَمَّا TOML فَيَعتَمِدُ عَلَى أَسنَامِ اَلجَدَاوِلِ [section] لِتَمثِيلِ اَلبُنَى اَلمُتَدَاخِلَةِ، وَلَا يَطلُبُ عَلَامَاتِ تَنصِيصٍ لِلمَفَاتِيحِ اَلبَسِيطَةِ، مِمَّا يَجْعَلُ اَلنَّصَّ أَقَلَّ فَوضَى. مِن حَيثُ اَلتَّعلِيقَاتِ، يُوفِّرُ TOML دَعمًا كَامِلًا بِوَاسِطَةِ #، أَمَّا JSON فَلَا يَدعَمُهَا رَسمِيًّا، مِمَّا يَدفَعُ اَلمُطَوِّرِينَ إِلَى حِيَلٍ غَيرِ قِيَاسِيَّةٍ. يَتَمَيَّزُ TOML بِنِظَامِ أَنوَاعٍ صَارِمٍ: يُفَرِّقُ بَينَ اَلأَعْدَادِ اَلصَّحِيحَةِ وَالعَشرِيَّةِ، وَيُوفِّرُ أَنوَاعًا لِلتَّارِيخِ وَالوَقْتِ بِشَكلٍ أَصلِيٍّ، بَينَمَا يَجمَعُ JSON كُلَّ اَلأَرقَامِ تَحتَ نَوعٍ وَاحِدٍ number، وَلَا يَعرِفُ اَلتَّوَارِيخَ إِلَّا كَسَلَاسِلَ. لِذَلِكَ، عِندَ اَلتَّحوِيلِ، يَتَحَتَّمُ تَفسِيرُ سَلَاسِلِ اَلتَّارِيخِ فِي JSON إِلَى نَوعِ datetime إِن تَطَابَقَت مَعَ الصِّيغَةِ اَلمِعيَارِيَّةِ. عَلَى صَعِيدِ اَلتَّدَاخُلِ، يَسمَحُ JSON بِأَيِّ عُمقٍ دُونَ قُيُودٍ، وَلَكِنَّ تَمثِيلَهُ قَد يُصبِحُ مُربِكًا، بَينَمَا يُشَجِّعُ TOML عَلَى تَسطِيحٍ نِسبِيٍّ بِوَاسِطَةِ اَلمَفَاتِيحِ اَلمُنقَّطَةِ وَالجَدَاوِلِ اَلفَرعِيَّةِ. هَذِهِ اَلفُرُوقُ تَعنِي أَنَّ مُحَوِّلَ JSON إِلَى TOML لَا يُجرِي مُجَرَّدَ تَرجَمَةٍ حَرفِيَّةٍ، بَل يُعِيدُ تَشكِيلَ اَلبَيَانَاتِ لِتَنتَظِمَ مَعَ فَلسَفَةِ TOML اَلتَّصمِيمِيَّةِ. وَلِمُقَارَنَةٍ أَوسَعَ مَعَ تَنسِيقَاتٍ أُخرَى، يُمكِنُكَ اِلِاطِّلَاعُ عَلَى مُحَوِّلِ JSON إِلَى YAML.

نَصَائِحُ لِتَحْوِيلٍ سَلِسٍ مِنْ JSON إِلَى TOML

لِلحُصُولِ عَلَى أَفضَلِ نَتَائِجَ عِندَ اِستِخدَامِ مُحَوِّلِ JSON إِلَى TOML، اِتَّبِعِ اَلنَّصَائِحَ اَلتَّالِيَةَ: - تَأَكَّد أَوَّلًا مِن صِحَّةِ مُستَندِ JSON؛ فَأَبسَطُ خَطَأٍ نَحوِيٍّ سَيُوقِفُ اَلتَّحوِيلَ. اِستَعِن بِـ أَدَاةِ تَنسِيقِ JSON لِلتَّأكُّدِ مِن خُلُوِّهِ مِن اَلمُشكِلَاتِ. - تَجَنَّبِ اَلمَصفُوفَاتِ فِي اَلجِذرِ إِن أَمكَنَ؛ لِأَنَّ TOML يَتَطَلَّبُ جَدوَلًا جِذرِيًّا. إِذَا كَانَ لَدَيكَ مَصفُوفَةٌ فِي اَلمُستَوَى اَلعُلَوِيِّ، فَسَيُغلِّفُهَا اَلمُحَوِّلُ تِلقَائِيًّا بِمِفتَاحٍ اِفتِرَاضِيٍّ مِثلَ root، مِمَّا قَد يَجعَلُ اَلبُنيَةَ أَقَلَّ وُضُوحًا. - عِندَ وُجُودِ كَائِنَاتٍ صَغِيرَةٍ مُتَدَاخِلَةٍ، يُفَضِّلُ اَلمُحَوِّلُ تَحوِيلَهَا إِلَى جَدَاوِلَ مُضَمَّنَةٍ (inline tables) لِلمُحَافَظَةِ عَلَى اَلقِصَرِ؛ تَأَكَّد مِن أَنَّ هَذَا يَتَنَاسَبُ مَعَ اَلغَرَضِ. - اِحرِص عَلَى أَن تَكُونَ أَيَّةُ تَوَارِيخَ فِي JSON مُصَاغَةً بِتِنسِيقِ ISO 8601 (مِثلَ "2025-04-09T15:30:00") لِيَتَعَرَّفَ اَلمُحَوِّلُ عَلَيهَا وَيُنشِئَ نَوعَ datetime فِي TOML؛ وإِلَّا سَتَبقَى سَلسِلَةً نَصِّيَّةً. - اِلتَزِم بِالَأَنوَاطِ اَلمُتَجَانِسَةِ فِي اَلمَصفُوفَاتِ؛ فَالمَصفُوفَةُ اَلمُختَلِطَةُ (أَعدَادٌ وَنُصُوصٌ) سَتَتَحَوَّلُ إِلَى مَصفُوفَةٍ نَصِّيَّةٍ بِالكَامِلِ، مِمَّا يَفقِدُ اَلتَّفرِقَةَ. - بَعدَ اَلتَّحوِيلِ، اِختَبِر مِلَفَّ TOML اَلنَّاتِجَ مَعَ اَلأَدَاةِ اَلمُستَهدَفَةِ (مِثلَ cargo check أَو poetry check) لِضَمَانِ قَبُولِهِ. - إِذَا كُنتَ تَحتَاجُ إِلَى اَلتَّحوِيلِ اَلعَكسِيِّ، فَإِنَّ مُحَوِّلَ TOML إِلَى JSON يَقُومُ بِالمُهِمَّةِ بِكَفَاءَةٍ. تَذَكَّر أَنَّ اَلتَّحوِيلَ غَيرَ اَلمُفقِدِ لِلبَيَانَاتِ يَتَطَلَّبُ اَن تَكُونَ اَلبَيَانَاتُ مُتَوَافِقَةً مَعَ قُيُودِ كِلَا اَلتَّنسِيقَينِ، وَبِاِتِّبَاعِ هَذِهِ اَلإِرشَادَاتِ سَتَضمَنُ سَلَاسَةً فِي اَلاِنتِقَالِ.

مُقَارَنَةٌ بَيْنَ JSON وَ TOML: أَيُّهُمَا تَخْتَارُ لِمَشَارِيعِكَ؟

عِندَمَا تَشرَعُ فِي مَشرُوعٍ بَرمَجِيٍّ جَدِيدٍ، قَد تَتَسَاءَلُ: هَل أَستَخدِمُ JSON أَم TOML لِلتَّهيِئَةِ وَتَبَادُلِ اَلبَيَانَاتِ؟ اَلإِجَابَةُ تَعتَمِدُ عَلَى اَلهَدَفِ. JSON هُوَ اَلمَلِكُ فِي عَالَمِ واجِهَاتِ اَلتَّطبِيقَاتِ (APIs) وَتِبَادُلِ اَلبَيَانَاتِ بَينَ اَلخَوَادِمِ؛ فَهُوَ مَدعُومٌ فِي كُلِّ لُغَةٍ تَقريبًا، وَسُرعَةُ تَحلِيلِهِ عَالِيَةٌ، وَبُنيَتُهُ اَلمُرنَةُ تَسمَحُ بِتَمثِيلٍ مُتَدَاخِلٍ دُونَ عَنَاءٍ. أَمَّا TOML فَقَد صُمِّمَ مِنَ اَلأَسَاسِ لِيَكُونَ قَابِلًا لِلقِرَاءَةِ اَلبَشَرِيَّةِ فِي مِلَفَّاتِ اَلتَّهيِئَةِ، مِمَّا يَجعَلُهُ اَلمُفَضَّلَ لَدَى مُطَوِّرِي رَست (Rust) وَبَايثُون (Python) وَهِيوجُو (Hugo) وَغَيرِهِم. إِذَا كَانَ مَشرُوعُكَ يَحتاجُ إِلَى مِلَفِّ تَهيِئَةٍ يُحَرِّرُهُ اَلبَشَرُ بِشَكلٍ دَورِيٍّ، فَإِنَّ TOML هُوَ اَلخِيَارُ اَلأَمثَلُ؛ لِأَنَّهُ يَدعَمُ اَلتَّعلِيقَاتِ وَأَنوَاعَ اَلبَيَانَاتِ اَلصَّارِمَةَ وَيَبدُو أَقَلَّ تَشتِيتًا. فِي اَلمُقَابِلِ، إِذَا كُنتَ تُبنِي خِدمَةً تُرجِعُ بَيَانَاتٍ لِعَمَلَاءَ مُتَعَدِّدِينَ، فَلَن تَجِدَ بَدِيلًا عَن JSON. لَكِن مَاذَا لَو أَرَدتَ اَلتَّحَوُّلَ بَينَهُمَا؟ هُنَا يَتَأَلَّقُ مُحَوِّلُ JSON إِلَى TOML؛ فَهُوَ يُزِيلُ اَلحَوَاجِزَ، سَوَاءٌ كُنتَ تُرِيدُ اِستِيرَادَ إِعدَادَاتٍ قَدِيمَةٍ إِلَى pyproject.toml أَو تَحوِيلَ نَمَاذِجَ اَلاِستِجَابَةِ إِلَى قَوَالِبَ تَهيِئَةٍ. فِي اَلسِّيَاقِ اَلعَرَبِيِّ، حَيثُ تَنتَشِرُ فِرَقٌ تَستَخدِمُ اَلمَنصَّاتِ اَلمُختَلِفَةَ (مِن نُظمِ إِدَارَةِ اَلمُحتَوَى إِلَى تَطبِيقَاتِ اَلتَعَلُّمِ اَلآلِي)، يُصبِحُ وُجُودُ أَدَاةِ تَحوِيلٍ مَرِنَةٍ أَمرًا ضَرُورِيًّا. بِاِختِصَارٍ: اِستَخدِم TOML حِينَ تَكتُبُ إِعدَادَاتٍ بَشَرِيَّةً، وَ JSON حِينَ تَتبَادَلُ اَلبَيَانَاتُ آَلِيًّا. وَإِذَا اِحتَّجتَ يَومًا إِلَى تَنسِيقَاتٍ بِدِيلَةٍ، يُوفِّرُ مُحَوِّلُ JSON إِلَى YAML مَسَارًا آخَرَ لِتَلبِيَةِ اِحتِيَاجَاتِ اَلتَّهيِئَةِ.

الأكثر شيوعًا.

كَيْفَ أَسْتَخْدِمُ مُحَوِّلَ JSON إِلَى TOML لِتَحْوِيلِ بَيَانَاتِي؟

بَعْدَ لَصْقِ نَصِّ JSON فِي المُحَوِّلِ، اِضْغَطْ عَلَى زِرِّ التَّحْوِيلِ لِتَحْصُلَ عَلَى مُخْرَجِ TOML فَوْرًا. يُمْكِنُكَ أَيْضًا اسْتِخْدَامُ مُحَوِّلِ TOML إِلَى JSON لِلْعَمَلِيَّةِ العَكْسِيَّةِ إِذَا اِحْتَجْتَ ذَلِكَ.

مَا أَهَمُّ الفُرُوقِ بَيْنَ صِيغَتَيْ JSON وَ TOML؟

تُسْتَخْدَمُ JSON بِشَكْلٍ رَئِيسِيٍّ كَصِيغَةِ تَبَادُلِ بَيَانَاتٍ بَيْنَ الأَنْظِمَةِ، وَتَعْتَمِدُ عَلَى الأَقْوَاسِ المُعَوَّجَةِ وَالمُعَقَّفَةِ، وَتَدْعَمُ القِيمَةَ null. أَمَّا TOML فَقَدْ صُمِّمَتْ لِمَلَفَّاتِ الإِعْدَادَاتِ، وَتَسْتَخْدِمُ صِيغَةَ مِفْتَاح = قِيمَة وَأَقْسَامًا [section]، وَهِيَ أَكْثَرُ سُهُولَةً لِلقِرَاءَةِ البَشَرِيَّةِ وَلَا تَحْتَوِي عَلَى null.

لِمَاذَا أُفَضِّلُ اسْتِخْدَامَ TOML فِي مَلَفَّاتِ الإِعْدَادَاتِ بَدَلًا مِنْ JSON؟

لِأَنَّ TOML صُمِّمَتْ خِصِّيصَى لِلقَابِلِيَّةِ لِلقِرَاءَةِ وَالكِتَابَةِ اليَدَوِيَّةِ؛ فَهِيَ تُوَفِّرُ تَسَلْسُلًا هَرَمِيًّا وَاضِحًا بِواسِطَةِ رُؤُوسِ الأَقْسَامِ، وَتَسْمَحُ بِإِضَافَةِ تَعْلِيقَاتٍ، وَلَا تَحْتَاجُ إِلَى فَوَاصِلَ أَو أَقْوَاسٍ. هَذَا يَجْعَلُهَا مِثَالِيَّةً فِي بِيئَاتٍ مِثْلَ Cargo.toml فِي رَسْت، وَ pyproject.toml فِي بَايثُون، وَإِعْدَادَاتِ هِيُوغُو. إِنْ كُنْتَ تَفَضَّلُ صِيغَةً أُخْرَى، يُمْكِنُكَ تَجْرِبَةُ مُحَوِّلِ JSON إِلَى YAML.

كَيْفَ يَتَعَامَلُ مُحَوِّلُ JSON إِلَى TOML مَعَ الهَيَاكِلِ المُتَدَاخِلَةِ وَالمُصَفَّوَاتِ؟

يَقُومُ المُحَوِّلُ بِتَحْوِيلِ الكَائِنَاتِ المُتَدَاخِلَةِ فِي JSON إِلَى جَدَاوِلِ TOML بِاسْتِخْدَامِ أَقْسَامٍ [قسم] أَو مَفَاتِيحَ مُنَقَّطَةٍ مِثْلَ parent.child. أَمَّا مُصَفَّوَاتُ الكَائِنَاتِ فَتَظْهَرُ عَلَى هَيْئَةِ مُصَفَّوَفَاتِ جَدَاوِلَ [[array]]، مِمَّا يَحْفَظُ التَّرْكِيبَةَ بِدِقَّةٍ حَتَّى فِي حَالَاتِ التَّدَاخُلِ العَمِيقِ.

هَلْ تَكونُ عَمَلِيَّةُ التَّحْوِيلِ مِنْ JSON إِلَى TOML غَيْرَ مِفْقَدَةٍ لِلْبَيَانَاتِ؟

لَيْسَتْ مِفْقَدَةً تَمَامًا؛ فَقِيمَةُ null فِي JSON قَدْ تُحْذَفُ أَو تَظْهَرُ كَنَصٍّ فَارِغٍ، وَالأَرْقَامُ الخَاصَّةُ مِثْلَ NaN وَ Infinity غَيْرُ مَدْعُومَةٍ فِي TOML وَقَدْ تُسَبِّبُ خَطَأً. لَكِنَّ المُحَوِّلَ يَحْرِصُ عَلَى الحِفَاظِ عَلَى جَمِيعِ البَيَانَاتِ المَعْنَوِيَّةِ، وَالتَّعْلِيقَاتُ لَا تُنْشَأ لِأَنَّ JSON لَا تَحْتَوِيهَا.

مَاذَا يَحْدُثُ مَعَ الأَحْرُفِ الخَاصَّةِ وَالنُّصُوصِ المُشَفَّرَةِ بِـ Unicode؟

يَتَعَامَلُ مُحَوِّلُ JSON إِلَى TOML مَعَ نُصُوصِ Unicode بِشَكْلٍ سَلِيمٍ، بِمَا فِيهَا الحُرُوفُ العَرَبِيَّةُ وَالصِّينِيَّةُ، وَيُحَافِظُ عَلَى تَسَلْسُلَاتِ الهُرُوبِ مِثْلَ \n عِنْدَ تَحْوِيلِهَا إِلَى صِيغَةٍ مَفهُومَةٍ فِي TOML. تَذْكُرُ أَنَّ TOML تَدْعَمُ تَرمِيزَ UTF-8 بِشَكْلٍ أَصْلِيٍّ.

هَلْ يُوجَدُ حَدٌّ أَقْصَى لِحَجْمِ مِلَفِّ JSON الَّذِي يُمْكِنُنِي تَحْوِيلُهُ؟

لَا يُوجَدُ حَدٌّ صَارِمٌ، غَيْرَ أَنَّ المِلَفَّاتِ الكَبِيرَةَ جِدًّا قَدْ تُؤَدِّي إِلَى بُطْءٍ فِي الأَدَاءِ أَثْنَاءَ التَّحْوِيلِ بِسَبَبِ اعْتِمَادِ الأَدَاةِ عَلَى ذَاكِرَةِ المُتَصَفِّحِ. فِي حَالَةِ المِلَفَّاتِ الضَّخْمَةِ، يُفَضَّلُ تَقْسِيمُ البَيَانَاتِ قَبْلَ التَّحْوِيلِ.

فِيمَ تُسْتَخْدَمُ لُغَةُ TOML تَقْلِيدِيًّا؟

تُعْتَمَدُ TOML عَلَى نِطَاقٍ وَاسِعٍ فِي مَلَفَّاتِ الإِعْدَادَاتِ الخَاصَّةِ بِالمَشَارِيعِ البَرْمَجِيَّةِ؛ مِثْلَ Cargo.toml لِمُدِيرِ الحُزَمِ فِي رَسْت، وَ pyproject.toml فِي بَايثُون، وَإِعْدَادَاتِ مُوَلِّدِ المَوَاقِعِ هِيُوغُو، وَغَيْرِهَا مِنَ الأَدَوَاتِ الَّتِي تُقَدِّرُ وُضُوحَ التَّكوِينِ وَسُهُولَةَ قِرَاءَةِ البَشَرِ.

هَلْ يَدْعَمُ المُحَوِّلُ مِيزَاتِ TOML المُتَقَدِّمَةَ مِثْلَ الجَدَاوِلِ المُضَمَّنَةِ وَمُصَفَّوَاتِ الجَدَاوِلِ؟

نَعَمْ، عِنْدَمَا يَكُونُ هَيْكَلُ JSON مُنَاسِبًا، يُنْتِجُ مُحَوِّلُ JSON إِلَى TOML جَدَاوِلَ مُضَمَّنَةً {مِفْتَاح = قِيمَة} لِلبَيَانَاتِ البَسِيطَةِ، وَيَسْتَخْدِمُ تِقْنِيَّةَ [[مُصَفَّوَفَةُ-الجَدَاوِلِ]] عِنْدَ تَحْوِيلِ مُصَفَّوَفَاتِ الكَائِنَاتِ، وَفْقًا لِمُوَاصَفَاتِ TOML الرَّسْمِيَّةِ.