From c30282e3ef1d899965de44cac634202fdb377a42 Mon Sep 17 00:00:00 2001 From: kn Date: Thu, 23 Oct 2025 09:33:30 +0200 Subject: [PATCH] Support jsonarrays in /api/ext responses --- Implementation/API/amc_api_handler_external.cpp | 5 +++++ Implementation/Core/amc_jsonwriter.cpp | 5 +++++ Implementation/Core/amc_jsonwriter.hpp | 2 ++ Implementation/LibMCEnv/libmcenv_jsonarray.cpp | 10 ++++++++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Implementation/API/amc_api_handler_external.cpp b/Implementation/API/amc_api_handler_external.cpp index 962040f7..a0e59d96 100644 --- a/Implementation/API/amc_api_handler_external.cpp +++ b/Implementation/API/amc_api_handler_external.cpp @@ -147,6 +147,11 @@ uint32_t CAPIHandler_External::handleEventRequest(CJSONWriter& writer, const std newObject.copyFromObject (iIter->value); writer.addObject(sValueName, newObject); } + if (iIter->value.IsArray()) { + AMC::CJSONWriterArray newArray (writer); + newArray.copyFromArray (iIter->value); + writer.addArray(sValueName, newArray); + } } diff --git a/Implementation/Core/amc_jsonwriter.cpp b/Implementation/Core/amc_jsonwriter.cpp index 290c5015..53809501 100644 --- a/Implementation/Core/amc_jsonwriter.cpp +++ b/Implementation/Core/amc_jsonwriter.cpp @@ -152,6 +152,11 @@ void CJSONWriterArray::addArray(CJSONWriterArray& array) m_Value.PushBack(array.m_Value, m_allocator); } +void CJSONWriterArray::copyFromArray(const rapidjson::Value& arrayValue) +{ + m_Value.CopyFrom(arrayValue, m_allocator); +} + CJSONWriter::CJSONWriter() diff --git a/Implementation/Core/amc_jsonwriter.hpp b/Implementation/Core/amc_jsonwriter.hpp index 490232a8..a8ef30bd 100644 --- a/Implementation/Core/amc_jsonwriter.hpp +++ b/Implementation/Core/amc_jsonwriter.hpp @@ -98,6 +98,8 @@ namespace AMC { void addArray(CJSONWriterArray& array); + void copyFromArray(const rapidjson::Value& arrayValue); + bool isEmpty(); }; diff --git a/Implementation/LibMCEnv/libmcenv_jsonarray.cpp b/Implementation/LibMCEnv/libmcenv_jsonarray.cpp index abc5f84b..0ef813c0 100644 --- a/Implementation/LibMCEnv/libmcenv_jsonarray.cpp +++ b/Implementation/LibMCEnv/libmcenv_jsonarray.cpp @@ -260,7 +260,10 @@ IJSONObject * CJSONArray::AddObjectValue() jsonValue.SetObject(); - auto pMember = &m_pInstance->PushBack(jsonValue, m_pDocument->GetAllocator()); + m_pInstance->PushBack(jsonValue, m_pDocument->GetAllocator()); + + // Get pointer to the newly added element (last element in array) + auto pMember = &(*m_pInstance)[m_pInstance->Size() - 1]; return new CJSONObject(m_pDocument, pMember); } @@ -271,7 +274,10 @@ IJSONArray * CJSONArray::AddArrayValue() jsonValue.SetArray(); - auto pMember = &m_pInstance->PushBack(jsonValue, m_pDocument->GetAllocator()); + m_pInstance->PushBack(jsonValue, m_pDocument->GetAllocator()); + + // Get pointer to the newly added element (last element in array) + auto pMember = &(*m_pInstance)[m_pInstance->Size() - 1]; return new CJSONArray(m_pDocument, pMember); }