Arduino için birkaç JSON ayrıştırma kütüphanesinin farkındayım.
Bunlardan hiçbirini hiç kullanmadım ama üzerinde çalıştığım bir projede basit JSON ayrıştırma yaptım, bu yüzden bunu nasıl yaptığımı göstereceğim.
NOT: Yazılım seri kitaplığını kullanarak seri verileri okuyorum. Sizin için çalışmak için bu kodu değiştirmeniz gerekir. Bu yalnızca çok basit JSON dizelerinde çalışır. O var çok sınırlı ama hepsi daha sonra ayrıştırma konum eğer o çalışacağız.
Sunucudan gelen JSON yanıtı örneği:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
İlk olarak, sadece süslü ayraçlar arasındaki verileri okuyun.
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);
}
Bu kod, verileri her seferinde bir bayt okur ve açık bir ayraç aldığında, bunu kaydetmeye başlar response
. Bir kapanış ayracı aldığında bitirir. İşte açık bir sınırlama, dizenizde sadece bir set açma / kapama parantezi olabilir.
Bir kez dize var, ben indexOf
ve substring
ilgili bilgileri ayıklamak için kullanın ve :
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Bu kod dizede + 5 karakterin start
başına ayarlanır id":"
. +5 çünkü bu ne kadar sürüyor id":"
. Yani start
için puan TEST1
JSON dizesinde. Sistemimde, kimlik her zaman 5 karakter uzunluğunda olacak, böylece sonu start + 5
. Sonra substring
onu çıkarmak için kullanıyorum.
Yine, kimse bu korkunç çözüm için oy vermeye başlamadan önce: ne ile çalıştığınızı tam olarak biliyorsanız ve bu kodun sınırlarını anlarsanız, bu kötü bir çözüm değildir. Bu işi yapan bir çözüm.