| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // ArduinoJson - arduinojson.org
- // Copyright Benoit Blanchon 2014-2017
- // MIT License
- //
- // This example shows how to parse a JSON document in an HTTP response.
- // It uses the Ethernet library, but can be easily adapted for Wifi.
- //
- // It performs a GET resquest on arduinojson.org/example.json
- // Here is the expected response:
- // {
- // "sensor": "gps",
- // "time": 1351824120,
- // "data": [
- // 48.756080,
- // 2.302038
- // ]
- // }
- #include <ArduinoJson.h>
- #include <Ethernet.h>
- #include <SPI.h>
- void setup() {
- // Initialize Serial port
- Serial.begin(9600);
- while (!Serial) continue;
- // Initialize Ethernet library
- byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
- if (!Ethernet.begin(mac)) {
- Serial.println(F("Failed to configure Ethernet"));
- return;
- }
- delay(1000);
- Serial.println(F("Connecting..."));
- // Connect to HTTP server
- EthernetClient client;
- client.setTimeout(10000);
- if (!client.connect("arduinojson.org", 80)) {
- Serial.println(F("Connection failed"));
- return;
- }
- Serial.println(F("Connected!"));
- // Send HTTP request
- client.println(F("GET /example.json HTTP/1.0"));
- client.println(F("Host: arduinojson.org"));
- client.println(F("Connection: close"));
- if (client.println() == 0) {
- Serial.println(F("Failed to send request"));
- return;
- }
- // Check HTTP status
- char status[32] = {0};
- client.readBytesUntil('\r', status, sizeof(status));
- if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
- Serial.print(F("Unexpected response: "));
- Serial.println(status);
- return;
- }
- // Skip HTTP headers
- char endOfHeaders[] = "\r\n\r\n";
- if (!client.find(endOfHeaders)) {
- Serial.println(F("Invalid response"));
- return;
- }
- // Allocate JsonBuffer
- // Use arduinojson.org/assistant to compute the capacity.
- const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60;
- DynamicJsonBuffer jsonBuffer(capacity);
- // Parse JSON object
- JsonObject& root = jsonBuffer.parseObject(client);
- if (!root.success()) {
- Serial.println(F("Parsing failed!"));
- return;
- }
- // Extract values
- Serial.println(F("Response:"));
- Serial.println(root["sensor"].as<char*>());
- Serial.println(root["time"].as<char*>());
- Serial.println(root["data"][0].as<char*>());
- Serial.println(root["data"][1].as<char*>());
- // Disconnect
- client.stop();
- }
- void loop() {
- // not used in this example
- }
- // See also
- // --------
- //
- // The website arduinojson.org contains the documentation for all the functions
- // used above. It also includes an FAQ that will help you solve any
- // serialization problem.
- // Please check it out at: https://arduinojson.org/
- //
- // The book "Mastering ArduinoJson" contains a tutorial on deserialization
- // showing how to parse the response from Yahoo Weather. In the last chapter,
- // it shows how to parse the huge documents from OpenWeatherMap
- // and Weather Underground.
- // Please check it out at: https://leanpub.com/arduinojson/
|