لتحقيق هدفك في تحليل ال JSON والحصول على قيمة معينة على أساس معايير محددة، يجب أولاً فهم تركيبة ال JSON وتحليله بشكل صحيح. في هذا ال JSON، يتكون كل عنصر من مصفوفة تحتوي على عدة مفاتيح مختلفة مثل “resourceId”، “resourceName”، “resourceDesc”، “permissions”، و”productName”. بعض المفاتيح تحتوي على قيم أخرى مثل “permissions” التي بدورها تحتوي على مصفوفة من الأذونات، كل منها يحتوي على “id”، “operation”، و “assignedToRoleFlag”.
للبدء، يمكنك استخدام مكتبة Ruby الرائعة لمعالجة JSON للوصول إلى القيم المطلوبة. في البداية، يجب عليك تحويل ال JSON إلى هيكل بيانات Ruby لتتمكن من الوصول إلى القيم بسهولة.
فيما يلي مثال على كيفية الوصول إلى قيمة “id” في حالة كون “resourceName” تساوي “Admin.Config” و “operation” تساوي “Read”:
rubyrequire 'json'
json_data = '{
"data": [{
"resourceId": 381,
"resourceName": "Admin.Config",
"resourceDesc": "Correspondence Admin -> Configuration",
"permissions": [{
"id": 1081,
"operation": "Update",
"assignedToRoleFlag": false
}, {
"id": 1071,
"operation": "Read",
"assignedToRoleFlag": false
}],
"productName": "Doc"
}, {
"resourceId": 391,
"resourceName": "Admin.Usage",
"resourceDesc": "Correspondence Admin -> Usage",
"permissions": [{
"id": 1091,
"operation": "Read",
"assignedToRoleFlag": false
}],
"productName": "Doc"
}]
}'
data_hash = JSON.parse(json_data)
permissions_ids = []
data_hash['data'].each do |resource|
if resource['resourceName'] == 'Admin.Config'
resource['permissions'].each do |permission|
if permission['operation'] == 'Read'
permissions_ids << permission['id']
end
end
end
end
puts "IDs for Admin.Config with operation Read: #{permissions_ids}"
هذا المثال يستخدم مكتبة JSON لتحليل ال JSON إلى بيانات Ruby قابلة للمعالجة. ثم يتم فحص كل عنصر في “data” للتأكد مما إذا كان “resourceName” يساوي “Admin.Config”، ثم يتم فحص كل عنصر في “permissions” للعثور على “operation” الذي يساوي “Read”، وإذا كان كذلك، يتم إضافة قيمة “id” إلى قائمة الأذونات.
هذه الطريقة تسمح لك بالوصول إلى البيانات التي تحتاج إليها بشكل دقيق ومحدد دون الحاجة إلى معرفة مسبقة بتركيب ال JSON بشكل كامل.
المزيد من المعلومات
بعد الحصول على البيانات المطلوبة، يمكنك استخدامها بالطريقة التي تناسب احتياجاتك. على سبيل المثال، يمكنك استخدام القائمة التي تحتوي على معرّفات الأذونات (IDs) لتنفيذ إجراءات أخرى في التطبيق الخاص بك، مثل فحص صلاحيات المستخدمين أو تسجيل الأنشطة.
من الجيد أيضًا أن تضع العملية في دالة قابلة لإعادة الاستخدام، حيث يمكنك إعادة استخدامها في أجزاء مختلفة من التطبيق الخاص بك. هذا يسهل عليك تنظيم الشفرة وصيانتها في المستقبل.
هذا هو المثال السابق محسّنًا بإضافة دالة للبحث عن الأذونات بناءً على المعايير المطلوبة:
rubyrequire 'json'
# تعريف الدالة للبحث عن الأذونات بناءً على المعايير
def find_permissions(data, resource_name, operation)
permissions_ids = []
data.each do |resource|
if resource['resourceName'] == resource_name
resource['permissions'].each do |permission|
if permission['operation'] == operation
permissions_ids << permission['id']
end
end
end
end
permissions_ids
end
# البيانات المستخدمة كمثال
json_data = '{
"data": [{
"resourceId": 381,
"resourceName": "Admin.Config",
"resourceDesc": "Correspondence Admin -> Configuration",
"permissions": [{
"id": 1081,
"operation": "Update",
"assignedToRoleFlag": false
}, {
"id": 1071,
"operation": "Read",
"assignedToRoleFlag": false
}],
"productName": "Doc"
}, {
"resourceId": 391,
"resourceName": "Admin.Usage",
"resourceDesc": "Correspondence Admin -> Usage",
"permissions": [{
"id": 1091,
"operation": "Read",
"assignedToRoleFlag": false
}],
"productName": "Doc"
}]
}'
# تحويل ال JSON إلى بيانات Ruby
data_hash = JSON.parse(json_data)
# استخدام الدالة للبحث عن الأذونات
permissions_ids = find_permissions(data_hash['data'], 'Admin.Config', 'Read')
# طباعة النتيجة
puts "IDs for Admin.Config with operation Read: #{permissions_ids}"
باستخدام هذا التحسين، يمكنك إعادة استخدام الدالة find_permissions
في أي مكان آخر في التطبيق الخاص بك بسهولة، وبدون الحاجة لتكرار الشفرة. هذا يجعل الشفرة أكثر قابلية للصيانة وتطويرها في المستقبل.