nlohmann Json not working with std::array<unsinged char, SIZE>

572 Views Asked by At

I have the below program to convert my class into JSON object using Nlohmann JSON, When I used the std::array<unsigned char, SIZE> it gave an error, but when I used the std::array<char, SIZE> it gave me the JSON object.

Here is my Code from VS2022:

#include <iostream>
#include <array>
#include "nlohmann/json.hpp"

using namespace nlohmann;
using namespace std;

typedef unsinged char BYTE;
class Person
{
public:
    Person(array<BYTE, 20> i_name, array<BYTE, 200> i_address, uint8_t i_age) :
        name(i_name), address(i_address), age(i_age)
    {}

    array<BYTE, 20> name;
    array<BYTE, 200> address;
    uint8_t age;
};

void To_String(json& i_JsonObj, const Person& i_P)
{
    i_JsonObj = json{
         {
        {"Name", i_P.name.data()},
        {"Address", i_P.address.data()},
        {"Age", i_P.age}
         }
    };
}

int main()
{
    cout << "Hello World" << endl;

    Person P{
        {'A','B','C','D','E','F',' ','G','H','J','K'},
        {'4','0','-','N','E','W','Y','A','R','K','-','A','M','E','R','I','C','A'},
        25
    };

    json JsonObj;
    To_String(JsonObj, P);
    std::cout << "Json Object: \n\t" << JsonObj.dump(4) << endl;

    return 0;
}

when I used the std::array<unsigned char, SIZE> get this ERROR:

no instance of constructor "nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>::basic_json [with ObjectType=std::map, ArrayType=std::vector, StringType=std::string, BooleanType=bool, NumberIntegerType=int64_t, NumberUnsignedType=uint64_t, NumberFloatType=double, AllocatorType=std::allocator, JSONSerializer=nlohmann::json_abi_v3_11_2::adl_serializer, BinaryType=std::vector<uint8_t, std::allocator<uint8_t>>, CustomBaseClass=void]" matches the argument list  nlohmannJson    C:\PiyushData\Learning\NlohmannJson\nlohmannJson\nlohmannJson\NlohmannJson_Main.cpp 27      argument types are: ({...})
'<function-style-cast>': cannot convert from 'initializer list' to 'nlohmann::json_abi_v3_11_2::json'   nlohmannJson    C:\PiyushData\Learning\NlohmannJson\nlohmannJson\nlohmannJson\NlohmannJson_Main.cpp 27  

I have to use only the unsigned char in the array, can't use the char or string instead. Also can not reinterpret_cast unsigned char to char, as it works if I cast it.

1

There are 1 best solutions below

2
Mr.Bhavadip Gothadiya On

You have to defined your user defined constructor with initializer_list as a parameter

like

For Example : Person(std::initializer_list init)