تحليل JSON باستخدام jsonlite
حوّل سلاسل JSON إلى قوائم R وإطارات بيانات باستخدام fromJSON()
تحليل JSON باستخدام jsonlite درس مجاني في R Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
ما هو JSON؟
JSON (ترميز الكائنات في JavaScript) هو تنسيق تبادل البيانات الشامل لواجهات API وخدمات الويب. وتحول حزمة jsonlite في R JSON إلى كائنات R، مثل القوائم وإطارات البيانات، والعكس، وفقًا لاتفاقيات tidy.
library(jsonlite)
# JSON looks like:
# { "name": "Alice", "age": 30, "active": true }
# fromJSON parses JSON string to R object
json_str <- '{"name":"Alice","age":30,"active":true}'
result <- fromJSON(json_str)
class(result) # 'list'
result$name # 'Alice'
result$age # 30 (numeric)
result$active # TRUE (logical)fromJSON(): التحليل الأساسي
تحلل fromJSON(txt) سلسلة JSON أو عنوان URL أو مسار ملف. وتحول أنواع JSON تلقائيًا: السلاسل → character، والأرقام → numeric، والقيم المنطقية → logical، وnull → NA، والمصفوفات → متجهات، والكائنات → قوائم مسماة.
library(jsonlite)
# Parsing different JSON types
fromJSON('"hello"') # character: 'hello'
fromJSON('42') # numeric: 42
fromJSON('true') # logical: TRUE
fromJSON('null') # NA
fromJSON('[1, 2, 3]') # numeric vector: c(1,2,3)
fromJSON('["a", "b", "c"]') # character vector
# Nested object
json <- '{"x": 1, "y": [2, 3], "z": null}'
obj <- fromJSON(json)
obj$x # 1
obj$y # c(2, 3)
obj$z # NAtoJSON(): تحويل R إلى JSON
تحول toJSON(x) كائنات R إلى سلاسل JSON. استخدم auto_unbox=TRUE لتحويل المتجهات ذات الطول 1 إلى قيم JSON مفردة، لا مصفوفات. وتضيف pretty=TRUE مسافات بادئة لتحسين قابلية القراءة.
library(jsonlite)
# Basic serialization
toJSON(c(1, 2, 3)) # '[1,2,3]'
toJSON(list(a=1, b='two')) # '{"a":[1],"b":["two"]}'
# auto_unbox: length-1 vectors become scalars
toJSON(list(name='Bob', age=25), auto_unbox = TRUE)
# '{"name":"Bob","age":25}'
# pretty printing
cat(toJSON(list(x=1, y=c(2,3)), pretty = TRUE))
# {
# "x": [1],
# "y": [2, 3]
# }تحويل مصفوفات JSON إلى إطارات بيانات
تتحول مصفوفات JSON التي تحتوي على كائنات تلقائيًا إلى إطارات بيانات باستخدام fromJSON(). وهذه من أكثر ميزات jsonlite فائدة؛ إذ تكون استجابات واجهات API غالبًا مصفوفات من السجلات، وهي مناسبة تمامًا لإطارات البيانات.
library(jsonlite)
# JSON array of objects -> data frame
json_array <- '[
{"name": "Alice", "age": 30, "score": 95},
{"name": "Bob", "age": 25, "score": 87},
{"name": "Carol", "age": 35, "score": 92}
]'
df <- fromJSON(json_array)
class(df) # 'data.frame'
nrow(df) # 3
print(df)
# name age score
# Alice 30 95
# Bob 25 87
# Carol 35 92تحويل إطار بيانات إلى JSON
يؤدي تحويل إطار بيانات إلى JSON باستخدام toJSON(df) إلى إنشاء مصفوفة JSON من الكائنات، بحيث يمثل كل كائن صفًا واحدًا. وهذا هو التنسيق القياسي لإرسال البيانات الجدولية إلى واجهات الويب البرمجية.
library(jsonlite)
df <- data.frame(
product = c('Apple', 'Banana', 'Cherry'),
price = c(1.20, 0.50, 3.00),
in_stock = c(TRUE, TRUE, FALSE),
stringsAsFactors = FALSE
)
# Default: each value is an array (even scalars)
cat(toJSON(df, pretty = FALSE))
# auto_unbox: single values become JSON scalars
cat('\n---\n')
cat(toJSON(df, auto_unbox = TRUE, pretty = TRUE))fromJSON() من عنوان URL
يمكن لـ fromJSON(url) جلب JSON وتحليله مباشرةً من عنوان URL. وهذه أبسط طريقة لاستدعاء واجهة JSON عامة لا تتطلب مصادقة.
library(jsonlite)
# Read JSON directly from a URL (requires internet)
# Example: JSONPlaceholder (free test API)
# result <- fromJSON('https://jsonplaceholder.typicode.com/todos/1')
# result$title # todo title
# result$completed # TRUE/FALSE
# Example: GitHub API
# repos <- fromJSON('https://api.github.com/users/hadley/repos')
# repos$name # vector of repo names
# nrow(repos) # number of repos returned
# Simulate with local JSON string:
result <- fromJSON('{"id":1,"title":"Learn R","completed":false}')
cat('Task:', result$title, '\nDone:', result$completed)prettify() و minify()
تضيف prettify(json_string) المسافات البادئة والأسطر الجديدة لتسهيل قراءة النص على البشر. وتزيل minify(json_string) المسافات البيضاء لإرسال النص بحجم مضغوط. وتعمل الدالتان على سلاسل JSON الخام.
library(jsonlite)
# Compact (minified) JSON
compact_json <- '{"name":"Alice","scores":[95,87,92],"active":true}'
cat('Minified:\n', compact_json, '\n\n')
# Prettify: add whitespace
cat('Prettified:\n')
cat(prettify(compact_json))
# {
# "name": "Alice",
# "scores": [95, 87, 92],
# "active": true
# }
# Minify: remove whitespace
pretty_json <- prettify(compact_json)
cat('\nRe-minified:\n')
cat(minify(pretty_json))flatten=TRUE للكائنات المتداخلة
عندما يحتوي JSON على كائنات متداخلة، تعمل fromJSON(json, flatten=TRUE) على تسطيح المفاتيح المتداخلة وتحويلها إلى أسماء أعمدة مفصولة بنقاط، مما يسهّل التعامل معها كإطار بيانات دون إجراء فكّ تداخل يدوي.
library(jsonlite)
json <- '[
{"id": 1, "user": {"name": "Alice", "city": "NY"}},
{"id": 2, "user": {"name": "Bob", "city": "LA"}}
]'
# Without flatten: nested list column
df_nested <- fromJSON(json)
class(df_nested$user) # data.frame (nested!)
# With flatten: flat column names
df_flat <- fromJSON(json, flatten = TRUE)
names(df_flat) # c('id', 'user.name', 'user.city')
print(df_flat)
# id user.name user.city
# 1 Alice NY
# 2 Bob LAالتعامل مع NA والمفاتيح المفقودة في JSON
تتحول قيمة JSON null إلى NA في R. أما المفاتيح المفقودة في مصفوفات JSON، عندما يحتوي أحد السجلات على حقل لا يحتويه سجل آخر، فتُملأ بقيمة NA في إطار البيانات الناتج.
library(jsonlite)
# JSON with null values
json_nulls <- '{"a": 1, "b": null, "c": "hello"}'
obj <- fromJSON(json_nulls)
obj$b # NA
is.na(obj$b) # TRUE
# Array with missing keys
json_missing <- '[
{"name": "Alice", "age": 30, "email": "a@b.com"},
{"name": "Bob", "age": 25}
]'
# 'email' missing from second record
df <- fromJSON(json_missing)
print(df)
# name age email
# Alice 30 a@b.com
# Bob 25 <NA>كتابة JSON إلى الملفات
استخدم write_json() أو writeLines(toJSON(x), file) لحفظ كائنات R في ملفات JSON. وهذا هو تنسيق الإخراج القياسي لمشاركة البيانات مع تطبيقات الويب أو واجهات API.
library(jsonlite)
results <- list(
model = 'linear_regression',
coefficients = list(intercept = 2.5, slope = 1.3),
r_squared = 0.87,
n_obs = 100
)
# Convert to JSON string
json_output <- toJSON(results, auto_unbox = TRUE, pretty = TRUE)
cat(json_output)
# Save to file (uncomment):
# write_json(results, 'model_results.json',
# auto_unbox = TRUE, pretty = TRUE)
# Or equivalently:
# writeLines(json_output, 'model_results.json')التحقق من صحة JSON
تتحقق الدالة validate(json_string) من jsonlite مما إذا كانت السلسلة تمثل JSON صالحًا، وتعيد TRUE/FALSE. ويكون ذلك مفيدًا قبل التحليل، ولا سيما عند التعامل مع إدخالات المستخدم أو استجابات واجهات API التي قد تكون غير صحيحة.
library(jsonlite)
# Valid JSON
validate('{"name": "Alice", "age": 30}') # TRUE
validate('[1, 2, 3]') # TRUE
validate('"just a string"') # TRUE
# Invalid JSON
validate('{name: Alice}') # FALSE (unquoted keys)
validate('[1, 2, 3,]') # FALSE (trailing comma)
validate('') # FALSE
# Safe parsing pattern
safe_parse <- function(json) {
if (!validate(json)) {
warning('Invalid JSON')
return(NULL)
}
fromJSON(json)
}
safe_parse('{"x": 1}')
safe_parse('{bad json}')اختبار سريع
اختبر معرفتك بتحليل JSON باستخدام jsonlite في R.
مراجعة: JSON باستخدام jsonlite
أهم النقاط: تحلل fromJSON() سلاسل JSON وعناوين URL والملفات وتحولها إلى قوائم R أو إطارات بيانات. وتحول toJSON() كائنات R إلى JSON؛ استخدم auto_unbox=TRUE للقيم المفردة. وتنسّق prettify()/minify() السلاسل. وتسطّح flatten=TRUE الكائنات المتداخلة. وتتحول قيمة JSON null إلى NA. وتتحقق validate() من صحة JSON قبل تحليله.
library(jsonlite)
# Complete jsonlite workflow:
# Parse
df <- fromJSON('[{"a":1,"b":2},{"a":3,"b":4}]')
print(df)
# Serialize
json <- toJSON(df, auto_unbox = TRUE, pretty = FALSE)
cat(json, '\n')
# Flatten nested
nested <- fromJSON(
'[{"id":1,"x":{"val":10}},{"id":2,"x":{"val":20}}]',
flatten = TRUE
)
print(nested)
# Validate before parse
validate('{"key": "value"}') # TRUEالأسئلة الشائعة
هل درس «تحليل JSON باستخدام jsonlite» مجاني؟
نعم — نص درس «تحليل JSON باستخدام jsonlite» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «تحليل JSON باستخدام jsonlite»؟
حوّل سلاسل JSON إلى قوائم R وإطارات بيانات باستخدام fromJSON() تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «تحليل JSON باستخدام jsonlite»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تحليل JSON باستخدام jsonlite
- إجراء طلبات HTTP باستخدام httr2
- استهلاك REST APIs في R
- التعامل مع بنى JSON المتداخلة