המרת מידע ממסד הנתונים לפורמט JSON

JSON הוא פורמט המשמש להעברת נתונים בצורה קלילה ונוחה.
במדריך זה נמשוך מידע ממסד הנתונים ונהפוך אותו לפורמט JSON.

אז מה זה JSON?

JSON (ראשי תיבות של JavaScript Object Notation) הוא אחד מהפורמטים הנפוצים ביותר להעברת נתונים, סביר להניח כי לא פעם נרצה למשוך מידע ממסד הנתונים ולהפוך אותו לפורמט JSON, למשל על מנת לתת לצד שלישי אפשרות לעבוד עם נתונים מאתרנו (כך עובדים רוב ה-API הקיימים כיום).

מישהו אמר XML?

נכון, קיים פורמט דומה אך שונה בשם XML (ראשי תיבות של eXtensible Markup Language).
ישנם המון שירותים שבוחרים להשתמש ב-XML.
במדריך זה נעסוק ב-JSON אך פורמט XML הוא גם נפוץ מאוד וחובה לדעת אותו.

הערה: במדריך זה נשתמש ב-PHP ובמסד נתונים מסוג MySQL.

אם אין לכם מסד נתונים שעליו תרצו לתרגל את המדריך, באפשרותכם לפתוח מסד נתונים חדש.
במדריך זה אשתמש בטבלה בשם users הכוללת 3 שדות: id, name ו- email.
במידה ותרצו ליצור את הטבלה שבה השתמשתי, לפניכם 2 השאילתות שתצטרכו, אחת ליצירת הטבלה ואחת לטובת הכנסת נתונים:

CREATE TABLE `users` (
    `id` int(11) NOT NULL,
    `name` varchar(25) CHARACTER SET utf8 NOT NULL,
    `email` varchar(25) CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `users` (`id`, `name`, `email`) VALUES
    (1, 'David', 'david@example.com'),
    (2, 'Maya', 'maya@example.com'),
    (3, 'Daniel', 'daniel@example.com');

במדריך זה נשתמש בהרחבת PDO לצורך עבודה מול מסד הנתונים.
אם אינכם מכירים את הרחבה זו, אני ממליץ לכם לקרוא את המדריך PDO שכתבתי.

התחברות למסד הנתונים

$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "dbjson";

try {
    $dbh= new PDO("mysql:host={$dbHost};dbname={$dbName}",$dbUser,$dbPass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch(PDOException $e) {
    echo "Error! ".$e->getMessage();
}

בשורות מספר 1-4 הזנו את פרטי הההתחברות למסד הנתונים שלנו.
בשורות מספר 6-11 יצרנו התחברות למסד הנתונים ועטפנו אותו בבלוק try..catch המומלץ.

לא קיבלתם Error? מעולה, נמשיך.

משיכת הנתונים ממסד הנתונים והכנסתם למערך

$stmt  = $dbh->prepare("SELECT * FROM users");
$stmt->execute();

$userData = array();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $userData['usersData'][] = $row;
}

בשורה מספר 1 כתבנו את השאילתא והכנו אותה על ידי שימוש ב-prepare.
בשורה מספר 2 הוצאנו את השאילתא אל הפועל.
בשורה מספר 4 יצרנו מערך בשם userData.
בשורות 6-8 שלפנו את כל השורות במסד הנתונים אותם למערך.

הפיכת המערך לפורמט JSON והדפסת התוצאה

ל-PHP קיימות פונקציות המיועדות לשימוש עם JSON.
על מנת להפוך מערך לפורמט JSON נשתמש בפונקציה json_encode, פונקציה זו מקבלת כאורגמנט את שם המערך שיהפוך לפורמט JSON:

$userDataJson = json_encode($userData);
echo $userDataJson;

זה הזמן לומר שהפונקציה json_decode תעשה פעולה הפוכה.

הקוד המלא:

$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "dbjson";

try {
    $dbh= new PDO("mysql:host={$dbHost};dbname={$dbName}",$dbUser,$dbPass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch(PDOException $e) {
    echo "Error! ".$e->getMessage();
}

$stmt  = $dbh->prepare("SELECT * FROM users");
$stmt->execute();

$userData = array();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $userData['usersData'][] = $row;
}

$userDataJson = json_encode($userData);

echo $userDataJson;

והתוצאה שנקבל:

{
  "usersData": [
    {
      "id": "1",
      "name": "David",
      "email": "david@example.com"
    },
    {
      "id": "2",
      "name": "Maya",
      "email": "maya@example.com"
    },
    {
      "id": "3",
      "name": "Daniel",
      "email": "daniel@example.com"
    }
  ]
}

הערה: סביר להניח כי תראו את התוצאה בצורה "מבולגנת", אני ממליץ על הורדת תוסף כמו תוסף זה (לכרום) אשר גורם לתוצאה להיראות ברורה יותר.

סיכום

JSON הוא פורמט נפוץ מאוד וכדאי מאוד לדעת לעבוד איתו, אני ממליץ לתרגל מדריך זה וליצור דוגמאות מורכבות יותר.

בהצלחה!

נהנת ממאמר זה? הירשם לרשימת התפוצה וקבל עדכונים על מאמרים חדשים!


3 תגובות בנושא “המרת מידע ממסד הנתונים לפורמט JSON”

  1. תודה. שאלה קטנה – מדוע בכלל צריך להשתמש ב JSON ?
    הרי אם שלפתי את הנתונים מה DB אני יכול להשתמש בהם כמו שהם, הלא כך ?

    1. היי,
      כפי שאמרתי JSON הוא פורמט המשמש להעברת נתונים, במידה ובעתיד תרצה לייצא נתונים ממסד הנתונים שלך ולהעביר אותם לצד שלישי כלשהו, JSON הוא הפורמט שכנראה תצטרך.
      בהצלחה 🙂

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *