انتقل إلى المحتوى

تحويل JSON إلى أصناف case في Scala — Numio

يحوّل عيّنة JSON إلى case classes في Scala. تصبح الكائنات المتداخلة case classes مستقلة والمصفوفات Seq[...]؛ وتصبح قيم null والمفاتيح المفقودة من بعض عناصر المصفوفة Option[...].

صياغة نماذج أولية لـ API بصيغة JSON قبل إضافة codec من Circe أو Play JSON أو uPickle.

JSON

Scala Case Class

متى تستخدمها

  • صياغة نماذج أولية لـ API بصيغة JSON قبل إضافة codec من Circe أو Play JSON أو uPickle.
  • تحويل حمولة مثال من Kafka أو HTTP إلى case classes لمهمة Spark أو Akka.

طريقة الاستخدام

  1. الصق كائن JSON؛ وللحقول الاختيارية أدرج عدة عناصر مصفوفة بمفاتيح مختلفة.
  2. تحقق من الناتج: اسم الصنف الجذري RootInterface، وتُسمّى الأصناف المتداخلة بحسب مفاتيحها بصيغة PascalCase (يصبح speakers هو Speakers).
  3. انسخ الأصناف، وأعد تسميتها، وحدّد بدقة أي Option[Any] أو Seq[Any] لم تتمكن العيّنة من تحديد نوعه.

إدخال JSON

{
  "id": 7,
  "type": "conference",
  "price": 49.9,
  "venue": null,
  "tags": ["jvm", "fp"],
  "speakers": [
    { "name": "Martin", "talk": "Keynote" },
    { "name": "Li", "talk": "Effects", "slides": "https://example.com/s.pdf" }
  ]
}

Scala case classes

case class RootInterface(
  id: Int,
  `type`: String,
  price: Double,
  venue: Option[Any],
  tags: Seq[String],
  speakers: Seq[Speakers]
)

case class Speakers(
  name: String,
  talk: String,
  slides: Option[String]
)

التفاصيل والقيود

يعمل في المتصفح بمولّد الموقع الخاص؛ بلا أي استدعاء للخادم. لا توجد إعدادات في الصفحة ولا تُضاف استيرادات أو اشتقاقات codec.

تُدمج كل عناصر المصفوفة: المفتاح المفقود من بعض العناصر، أو الذي قيمته null في بعضها، يصبح Option[...]، ووجود 12 بجانب 1.5 يعطي Double.

القيمة التي تكون null دائمًا تعطي Option[Any] والمصفوفة الفارغة Seq[Any]، لأن العيّنة لا تُظهر أي نوع.

تُحاط الكلمات المحجوزة والمفاتيح التي ليست معرّفات صالحة بعلامات backtick، مثل `type`؛ وتبقى مفاتيح snake_case كما كُتبت.

FAQ

هل يُنشئ Option للحقول القابلة لـ null؟

نعم. المفتاح الذي قيمته null يصبح Option[...]، بنوع مأخوذ من العيّنات الأخرى إذا كان للمفتاح قيم حقيقية أيضًا، وإلا فـ Option[Any]. والمفاتيح المفقودة من بعض عناصر المصفوفة تصبح Option كذلك.

ماذا يحدث لمصفوفة JSON في المستوى الجذري؟

تُدمج عناصرها في case class واحد هو RootInterface، مع جعل المفاتيح المفقودة من بعض العناصر Option، ويُضاف type RootInterfaceList = Seq[RootInterface].

هل يُعطى معرّف 64 بت النوع Long؟

فقط إذا كانت قيمة في العيّنة خارج نطاق Int (نحو ±2.1 مليار). الأعداد الصحيحة الأخرى تصبح Int، لذا غيّر المعرّفات أو الطوابع الزمنية إلى Long إذا كان يمكن أن تكبر.

المواصفات والمراجع