ฉันตระหนักถึงการแยก JSON ห้องสมุดสำหรับ Arduino
ฉันไม่เคยใช้สิ่งเหล่านี้เลย แต่ฉันได้ทำการแยก JSON แบบง่ายๆในโครงการที่ฉันกำลังทำอยู่ดังนั้นฉันจะแสดงให้คุณเห็นว่าฉันทำอย่างนั้นได้อย่างไร
หมายเหตุ: ฉันกำลังอ่านข้อมูลอนุกรมโดยใช้ไลบรารีอนุกรมซอฟต์แวร์ คุณจะต้องเปลี่ยนรหัสนี้เพื่อให้เหมาะกับคุณ สิ่งนี้จะทำงานกับสตริง JSON ที่ง่ายมากเท่านั้น มันมีจำกัดมากแต่ถ้านั่นคือทั้งหมดที่คุณแยกวิเคราะห์มันจะใช้ได้
ตัวอย่างการตอบสนอง JSON จากเซิร์ฟเวอร์:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
ก่อนอื่นให้อ่านเฉพาะข้อมูลระหว่างเครื่องหมายปีกกา
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);
}
response
รหัสนี้อ่านข้อมูลหนึ่งไบต์ในเวลาและเมื่อได้รับรั้งเปิดก็จะเริ่มการบันทึกลงใน เมื่อมันได้รับวงเล็บปิดมันจะจบลง ดังนั้นนี่คือข้อ จำกัด ที่ชัดเจนคุณสามารถมีวงเล็บเปิด / ปิดหนึ่งชุดในสตริงของคุณเท่านั้น
เมื่อฉันมีสตริงฉันใช้indexOf
และsubstring
เพื่อดึงข้อมูลที่เกี่ยวข้อง:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
รหัสนี้ตั้งค่าstart
เริ่มต้นของid":"
อักขระ +5 ในสายอักขระ มันเป็น 5 เพราะเห็นว่าเป็นวิธีที่ยาวid":"
เป็น ดังนั้นstart
ชี้ไปที่TEST1
ในสตริง JSON ในระบบของฉัน ID จะถูกเสมอไปเป็น 5 start + 5
ตัวอักษรเพื่อให้สิ้นสุด จากนั้นฉันก็ใช้substring
เพื่อสกัด
อีกครั้งก่อนที่ทุกคนจะเริ่มลงคะแนนให้ฉันสำหรับโซลูชันที่น่ากลัวนี้: หากคุณรู้ว่าคุณกำลังทำงานอะไรอยู่และเข้าใจข้อ จำกัด ของรหัสนี้ มันเป็นทางออกที่ทำให้งานเสร็จ