Skip to content

JsonVariantConst bug with Arrays #2221

@vladtepesch

Description

@vladtepesch

Describe the bug
JsonVariantConst behaves different than JsonVariant:

If assigning a JsonArray to JsonVariantConst .is<JsonArray>() gives false (while JsonVariant::is<JsonArray>() gives true)

Troubleshooter report
does not apply - question 3 and 4 does not map to problem

Environment
Here is the environment that I used:

  • online compiler
  • local gcc
  • Microcontroller: ESP32-S3
  • ArduinoJson-v7.4.3

Reproduction
Here is a small snippet that reproduces the issue.

https://onecompiler.com/cpp/44ffv6mub


#include <iostream>
#include "ArduinoJson.h"
int main() {
  JsonDocument doc;
  // Add an array
  JsonArray data = doc["data"].to<JsonArray>();
  data.add(127);
  data.add(255);
  data.add(0);
  
  JsonVariantConst varConst = data;
  JsonVariant      var      = data;

  std::cout <<"doc[\"data\"].is<JsonArray>(); " << doc["data"].is<JsonArray>() << std::endl;
  std::cout <<"varConst.is<JsonArray>(); " << varConst.is<JsonArray>() << std::endl;
  std::cout <<"var.is<JsonArray>(); " << var.is<JsonArray>() << std::endl;
}

Compiler output
n/a

Program output

Expected output:

doc["data"].is<JsonArray>(); 1
varConst.is<JsonArray>(); 1
var.is<JsonArray>(); 1

Actual output:

doc["data"].is<JsonArray>(); 1
varConst.is<JsonArray>(); 0    <-------
var.is<JsonArray>(); 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions