Saya mengetahui beberapa parsing JSON untuk Arduino.
Saya tidak pernah menggunakan ini tetapi saya melakukan beberapa JSON sederhana parsing dalam proyek yang sedang saya kerjakan jadi saya akan menunjukkan kepada Anda bagaimana saya melakukannya.
CATATAN: Saya membaca data serial menggunakan pustaka serial perangkat lunak. Anda harus mengubah kode ini agar bekerja untuk Anda. Ini hanya akan bekerja pada string JSON yang sangat sederhana. Ini sangat terbatas tetapi jika hanya itu yang Anda parsing maka itu akan berhasil.
Contoh respons JSON dari server:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Pertama, hanya baca data antara kurung kurawal.
String response = "";
bool begin = false;
while (SIM900.available() || !begin) {
char in = SIM900.read();
if (in == '{') {
begin = true;
}
if (begin) response += (in);
if (in == '}') {
break;
}
delay(1);
}
Kode ini membaca data satu byte pada satu waktu dan setelah mendapat tanda kurung terbuka, ia mulai menyimpannya response
. Ketika mendapat penjepit penutup, itu mengakhirinya. Jadi, inilah batasan yang jelas, Anda hanya dapat memiliki satu set kawat pembuka / penutup pada string Anda.
Setelah saya memiliki string, saya menggunakan indexOf
dan substring
untuk mengekstrak informasi yang relevan:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Kode ini diset start
ke awal id":"
+ 5 karakter dalam string. Ini +5 karena itu berapa lama id":"
. Jadi start
menunjuk ke TEST1
dalam string JSON. Dalam sistem saya, ID akan selalu sepanjang 5 karakter, jadi pada akhirnya start + 5
. Saya kemudian gunakan substring
untuk mengekstraknya.
Sekali lagi, sebelum ada yang mulai memilih saya untuk solusi mengerikan ini: jika Anda tahu persis apa yang Anda kerjakan, dan memahami keterbatasan kode ini, maka ini bukan solusi yang buruk. Ini solusi yang menyelesaikan pekerjaan.