- Sj.h adalah parser JSON ultra-ringan yang terdiri dari sekitar 150 baris dan dapat digunakan di lingkungan berbasis C99
- Memiliki karakteristik seperti tanpa alokasi memori dan state minimal, sehingga cocok untuk lingkungan embedded yang ringan atau saat ingin meminimalkan dependensi
- Mengadopsi pendekatan yang menangani parsing angka dan string secara langsung, sehingga pengguna dapat dengan bebas mengimplementasikan pemrosesan terkait
- Mendukung pesan kesalahan berbasis baris:kolom, sehingga keterbacaan saat debugging dan identifikasi lokasi menjadi lebih baik
- Sebagai perangkat lunak domain publik, siapa pun bebas menggunakan, mengubah, dan mendistribusikannya
Pengenalan proyek
- Sj.h adalah file header C99 yang menyediakan kemampuan parsing JSON hanya dengan kode seminimal mungkin, tanpa fitur berlebihan atau alokasi memori yang tidak perlu
- Seluruh implementasinya sekitar 150 baris, sehingga cocok untuk sistem embedded, alat bantu, atau ketika ingin mengurangi ketergantungan pada pustaka eksternal
Fitur utama
- Berjalan dengan zero-allocations dan minimal state, sehingga beban memori sangat rendah
- Dengan pesan kesalahan yang menyertakan informasi baris:kolom, lokasi masalah yang terjadi selama parsing mudah diidentifikasi
- Parsing angka tidak disediakan secara bawaan; pengguna dapat memakai cara yang diinginkan seperti strtod, atoi
- Parsing string juga dapat diimplementasikan sendiri, atau penanganan Unicode surrogate pair dapat dibangun sesuai kebutuhan
- Seluruh kode sumber disediakan sebagai domain publik (Unlicense), sehingga dapat digunakan dan diubah tanpa batasan lisensi
Contoh penggunaan
- Disediakan contoh sederhana untuk mem-parsing string JSON menjadi struct Rect
char *json_text = "{ \"x\": 10, \"y\": 20, \"w\": 30, \"h\": 40 }"; typedef struct { int x, y, w, h; } Rect; ... - Menggunakan API yang sederhana dan jelas seperti sj_Reader, sj_Value, sj_reader, sj_read, sj_iter_object
- Parsing nilai numerik maupun perbandingan key-value diimplementasikan sendiri (tidak disediakan builtin)
- Berbagai contoh penggunaan tambahan dapat dilihat di folder demo
Lisensi
- Sj.h adalah perangkat lunak domain publik yang dapat digunakan siapa saja tanpa batasan
- Untuk detail lebih lanjut, lihat file LICENSE
Lainnya
- Karena kode dan struktur foldernya sederhana, ini bisa langsung digunakan tanpa konfigurasi atau prosedur build terpisah
- Bersifat mandiri, tidak memiliki dependensi eksternal, dan terutama cocok untuk lingkungan yang membutuhkan keringanan serta kemudahan penggunaan
1 komentar
Komentar Hacker News
intdi source code menjadi 64-bit. Meski begitu, kalau inputnya melebihi 2^64, pada akhirnya tetap akan mati. Saya juga tidak berniat mengecek overflowintsatu per satu di kodeintberukuran 32-bit, masalah baru muncul jika setiap baris memiliki nesting sedalam 2 miliar, atau berkas memiliki lebih dari 2 miliar baris, atau satu baris memiliki lebih dari 2 miliar karakter]maupun}, dan juga menganggap\vsebagai whitespace, jadi lebih permisif daripada standar. Lebih tepat jika dipandang sebagai "ekstraktor data untuk JSON yang benar". Meski begitu, menulis parser string atau angka sendiri bisa merepotkan, terutama jika perlu menyepakati subset sintaks JSON dengan pihak yang menghasilkan datanyafloatatauint, sepertinya Anda harus menambahkan bagian seperti itu sendiri. Meski begitu tetap mengesankan dan saya bersedia memakainya, saya cuma ingin menyoroti hal itu= { 0 }yang terlewat. Jika melihat kode terkait,r->depthtampaknya belum diinisialisasi dan bisa saja kebetulan sama dengan depth di loopsj__discard_untilr->depthsebenarnya sudah diinisialisasi ke 0 di sini, lihat kode terkaitstdbool.hdanstddef.huntuk definisi tipe). Tidak ada permainan template C++, dan API-nya intuitif. Sangat jarang ada pustaka C yang memenuhi semua syarat ini; di C++ malah lebih jarang lagi