C:
การทำงานกับ JSON

วิธีการ:

ในการใช้งาน JSON ในภาษา C, คุณมักจะใช้ไลบรารีเช่น jansson หรือ json-c เนื่องจากภาษา C ขาดการสนับสนุน JSON โดยตรง ที่นี่ เราจะโฟกัสที่ jansson เนื่องจากความง่ายในการใช้งานและการบำรุงรักษาที่เป็นปัจจุบัน ขั้นแรก, ติดตั้งไลบรารี (เช่น ใช้งาน package manager เช่น apt บน Ubuntu: sudo apt-get install libjansson-dev)

เรามาเริ่มกันด้วยการวิเคราะห์สตริง JSON และการเข้าถึงเนื้อหาของมัน:

#include <jansson.h>
#include <stdio.h>

int main() {
    const char *json_string = "{\"name\":\"John Doe\",\"age\":30}";
    json_error_t error;
    json_t *root = json_loads(json_string, 0, &error);
    
    if(!root) {
        fprintf(stderr, "error: on line %d: %s\n", error.line, error.text);
        return 1;
    }
    
    const char *name;
    int age;
    json_unpack(root, "{s:s, s:i}", "name", &name, "age", &age);
    
    printf("Name: %s\nAge: %d\n", name, age);
    
    json_decref(root);
    return 0;
}

ผลลัพธ์ตัวอย่าง:

Name: John Doe
Age: 30

ต่อไป, การสร้างและการแสดงผลของวัตถุ JSON:

#include <jansson.h>
#include <stdio.h>

int main() {
    json_t *root = json_object();
    json_object_set_new(root, "name", json_string("Jane Doe"));
    json_object_set_new(root, "age", json_integer(25));
    
    char *json_dump = json_dumps(root, JSON_ENCODE_ANY);
    printf("%s\n", json_dump);
    
    free(json_dump);
    json_decref(root);
    return 0;
}

ผลลัพธ์ตัวอย่าง:

{"name": "Jane Doe", "age": 25}

ตัวอย่างดังกล่าวนี้แสดงให้เห็นถึงพื้นฐานของการโหลดสตริง JSON, การแกะสลักค่าที่มี, การสร้างวัตถุ JSON ใหม่, แล้วจากนั้นการแสดงมันออกมาเป็นสตริง

ดำดิ่งลึก

ความจำเป็นในการทำงานกับ JSON ในภาษา C เกิดจากการที่เว็บไซต์นั้นเลือกใช้ JSON เป็นรูปแบบหลักสำหรับการแลกเปลี่ยนข้อมูล ความเรียบง่ายและประสิทธิภาพของ JSON ทำให้มันเร็วกว่า XML อย่างรวดเร็ว ถึงแม้ภาษา C เริ่มแรกจะไม่มีการสนับสนุนตรงสำหรับการจัดการ JSON การแก้ปัญหาแต่เดิมเกี่ยวข้องกับการจัดการสตริงแบบด้วยตนเองซึ่งเสี่ยงต่อข้อผิดพลาดและไม่มีประสิทธิภาพ ไลบรารีเช่น jansson และ json-c ถูกสร้างขึ้นเพื่อเติมเต็มช่องว่างนี้ โดยให้ API ที่แข็งแกร่งสำหรับการแยกส่วน, การสร้าง, และการซีเรียไลซ์ JSON

ในขณะที่ jansson มอบความเรียบง่ายและความสะดวกในการใช้งาน, json-c อาจดึงดูดผู้ที่กำลังมองหาชุดคุณสมบัติที่กว้างขึ้น อย่างไรก็ตาม, ทางเลือกอื่นๆ เช่น ไลบรารีการแยกส่วนในภาษา C++ นำเสนอการนำเสนอที่ซับซ้อนขึ้น โดยขอบคุณต่อโครงสร้างข้อมูลที่ซับซ้อนขึ้นและการสนับสนุนไลบรารีมาตรฐานของภาษานั้น อย่างไรก็ตาม เมื่อทำงานในสภาพแวดล้อมที่ภาษา C เป็นที่ต้องการหรือจำเป็น - เช่น ระบบฝังตัวหรือเมื่อต้องจัดการกับไลบรารี C ที่มีอยู่ - การใช้ jansson หรือ json-c กลายเป็นสิ่งจำเป็น

ยังควรทราบว่าการทำงานกับ JSON ในภาษา C ต้องมีการเข้าใจที่ลึกขึ้นเกี่ยวกับการจัดการหน่วยความจำ เนื่องจากไลบรารีเหล่านี้มักจะคืนค่าวัตถุที่จัดสรรเนื้อที่อย่างพลวัตซึ่งจำเป็นต้องมีการคืนค่าอย่างชัดเจน ซึ่งเป็นความท้าทายสำหรับโปรแกรมเมอร์ในการหาความสมดุลระหว่างความสะดวกกับความรับผิดชอบในการป้องกันการรั่วไหลของหน่วยความจำ ซึ่งเป็นส่วนสำคัญของการเขียนโค้ด C ที่มีประสิทธิภาพ