تحويل JSON إلى Protobuf message

نقطة بداية لتعريف خدمة gRPC أو نقل بيانات JSON موجودة إلى Protobuf.

جارٍ تحميل الأداة…

المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.

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

  1. أدخل نص JSON واسم النوع الرئيسي.
  2. تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
  3. انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.

طريقة الحساب

string وint32 أو int64 وdouble وbool، وrepeated للمصفوفات، وmessage لكل كائن مع أرقام حقول من 1 بترتيب المفاتيح. الأسماء بصيغة snake_case مع json_name عندما يختلف الاسم المشتق عن المفتاح، وnull في حقل بسيط يضيف optional. القيم المختلطة تستخدم google.protobuf.Value.

مثال

المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: syntax = "proto3"; message Root { int32 id = 1; string name = 2; string email = 3; bool is_active = 4 [json_name = "is_active"]; double balance = 5; repeated string tags = 6; Address address = 7; repeated Order orders = 8; } message Address { string city = 1; string postal_code = 2 [json_name = "postal_code"]; } message Order { string order_id = 1 [json_name = "order_id"]; double total = 2; optional string coupon = 3; }، عدد الأنواع: 3، عدد الحقول: 13.

{
  "id": 1024,
  "name": "Sara Ahmed",
  "email": "sara@example.com",
  "is_active": true,
  "balance": 1520.75,
  "tags": ["vip", "riyadh"],
  "address": { "city": "Riyadh", "postal_code": "12211" },
  "orders": [
    { "order_id": "A-1", "total": 99.5, "coupon": "EID10" },
    { "order_id": "A-2", "total": 120, "coupon": null }
  ]
}
syntax = "proto3";

message Root {
  int32 id = 1;
  string name = 2;
  string email = 3;
  bool is_active = 4 [json_name = "is_active"];
  double balance = 5;
  repeated string tags = 6;
  Address address = 7;
  repeated Order orders = 8;
}

message Address {
  string city = 1;
  string postal_code = 2 [json_name = "postal_code"];
}

message Order {
  string order_id = 1 [json_name = "order_id"];
  double total = 2;
  optional string coupon = 3;
}

الحدود والملاحظات

  • في ترميز JSON الرسمي لبروتوكول Protobuf يظهر int64 نصا بين علامتي تنصيص.
  • أرقام الحقول تتبع ترتيب المفاتيح، فلا تغيرها بعد استخدام الرسائل في الإنتاج.

أسئلة شائعة عن هذه الأداة

متى يضاف json_name؟

Protobuf يشتق اسم JSON من snake_case إلى camelCase، فإذا اختلف الناتج عن المفتاح الأصلي يضاف json_name ليطابقه.

لماذا int32 وليس int64؟

يستخدم int32 ما دامت القيم ضمن حدوده، وint64 إذا ظهر عدد أكبر من 2147483647.

هل ترسل بياناتي إلى خادم؟

لا، التحويل يعمل داخل متصفحك ولا يغادر نص JSON جهازك.