Mercurial > hg > orthanc
diff PalantirServer/FromDcmtkBridge.cpp @ 35:f6d12037f886
full json vs. simplified json
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 30 Aug 2012 12:24:31 +0200 |
parents | 67a6978503b7 |
children | c1097a676eca |
line wrap: on
line diff
--- a/PalantirServer/FromDcmtkBridge.cpp Thu Aug 30 11:22:21 2012 +0200 +++ b/PalantirServer/FromDcmtkBridge.cpp Thu Aug 30 12:24:31 2012 +0200 @@ -298,14 +298,20 @@ { assert(target.type() == Json::objectValue); - const std::string tagName = FromDcmtkBridge::GetName(FromDcmtkBridge::GetTag(element)); + DicomTag tag(FromDcmtkBridge::GetTag(element)); + const std::string tagName = FromDcmtkBridge::GetName(tag); + const std::string formattedTag = tag.Format(); if (element.isLeaf()) { + Json::Value value(Json::objectValue); + value["Name"] = tagName; + std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(element)); if (v->IsNull()) { - target[tagName] = Json::nullValue; + value["Type"] = "Null"; + value["Value"] = Json::nullValue; } else { @@ -313,18 +319,21 @@ if (maxStringLength == 0 || s.size() <= maxStringLength) { - target[tagName] = s; + value["Type"] = "String"; + value["Value"] = s; } else { - // An integer value of 0 in JSON indicates too long field - target[tagName] = 0; + value["Type"] = "TooLong"; + value["Value"] = Json::nullValue; } } + + target[formattedTag] = value; } else { - target[tagName] = Json::Value(Json::arrayValue); + Json::Value children(Json::arrayValue); // "All subclasses of DcmElement except for DcmSequenceOfItems // are leaf nodes, while DcmSequenceOfItems, DcmItem, DcmDataset @@ -334,9 +343,13 @@ for (unsigned long i = 0; i < sequence.card(); i++) { DcmItem* child = sequence.getItem(i); - Json::Value& v = target[tagName].append(Json::objectValue); + Json::Value& v = children.append(Json::objectValue); StoreItem(v, *child, maxStringLength); } + + target[formattedTag]["Name"] = tagName; + target[formattedTag]["Type"] = "Sequence"; + target[formattedTag]["Value"] = children; } }