MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / parseJSON

Method parseJSON

app/src/DataModel/Importers/ModbusMapImporter.cpp:594–646  ·  view source on GitHub ↗

* @brief Parses a JSON register map (flat registers array or grouped by type). */

Source from the content-addressed store, hash-verified

592 * @brief Parses a JSON register map (flat registers array or grouped by type).
593 */
594bool DataModel::ModbusMapImporter::parseJSON(const QString& path)
595{
596 QFile file(path);
597 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
598 return false;
599
600 const auto result = Misc::JsonValidator::parseAndValidate(file.readAll());
601 file.close();
602
603 if (!result.valid) {
604 qWarning() << "[ModbusMapImporter] Invalid JSON map:" << result.errorMessage;
605 return false;
606 }
607
608 if (!result.document.isObject())
609 return false;
610
611 const auto root = result.document.object();
612
613 if (root.contains(QStringLiteral("registers"))) {
614 const auto arr = root.value(QStringLiteral("registers")).toArray();
615 for (const auto& item : arr) {
616 RegisterEntry entry;
617 if (parseRegisterEntry(item.toObject(), entry))
618 m_registers.append(entry);
619 }
620 }
621
622 // clang-format off
623 static const struct { const char* key; int type; } groups[] = {
624 {"holdingRegisters", 0}, {"holding_registers", 0}, {"holding", 0},
625 {"inputRegisters", 1}, {"input_registers", 1}, {"input", 1},
626 {"coils", 2},
627 {"discreteInputs", 3}, {"discrete_inputs", 3}, {"discrete", 3},
628 };
629
630 // clang-format on
631
632 for (const auto& g : groups) {
633 const auto key = QLatin1String(g.key);
634 if (!root.contains(key))
635 continue;
636
637 const auto arr = root.value(key).toArray();
638 for (const auto& item : arr) {
639 RegisterEntry entry;
640 if (parseRegisterEntry(item.toObject(), entry, g.type))
641 m_registers.append(entry);
642 }
643 }
644
645 return !m_registers.isEmpty();
646}
647
648//--------------------------------------------------------------------------------------------------
649// Register block grouping

Callers

nothing calls this directly

Calls 6

isEmptyMethod · 0.80
openMethod · 0.45
closeMethod · 0.45
containsMethod · 0.45
valueMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected