मैं Arduino के लिए कुछ JSON पार्सिंग पुस्तकालयों से अवगत हूं।
मैंने इनमें से किसी का भी कभी उपयोग नहीं किया है, लेकिन मैंने एक परियोजना में कुछ सरल 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);
यह कोड स्ट्रिंग में + 5 वर्णों start
की शुरुआत के लिए सेट है id":"
। यह +5 है क्योंकि यह कितना लंबा id":"
है। तो JSON स्ट्रिंग में start
इंगित TEST1
करता है। मेरे सिस्टम में, ID हमेशा 5 वर्णों वाली होती है, इसलिए अंत होता है start + 5
। मैं तो substring
उस निकालने के लिए उपयोग करता हूं ।
दोबारा, इससे पहले कि कोई भी इस भयानक समाधान के लिए मुझे वोट देना शुरू करे: यदि आप जानते हैं कि आप वास्तव में क्या काम कर रहे हैं, और इस कोड की सीमाओं को समझते हैं, तो यह एक बुरा समाधान नहीं है। यह एक उपाय है जिससे काम पूरा हो जाता है।