CJsonNode CJsonNode::GetByKeyOrNull(const string& key) const { const SJsonObjectNodeImpl* impl(m_Impl->GetObjectNodeImpl("GetByKey()")); TJsonObjectElements::const_iterator it = impl->m_Elements.find(SJsonObjectElement(key, NULL)); if (it == impl->m_Elements.end()) return CJsonNode(); return const_cast<SJsonNodeImpl*>(it->m_Node.GetPointerOrNull()); }
CJsonNode CExecAndParseStructuredOutput::ParseNode() { switch (*m_Ch) { case '[': ++m_Ch; return ParseArray(); case '{': ++m_Ch; return ParseObject(false); case '\'': case '"': return CJsonNode::NewStringNode(ParseString()); } size_t max_len = GetRemainder(); size_t len = 1; switch (*m_Ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': while (len <= max_len && isdigit(m_Ch[len])) ++len; { CJsonNode::TNumber val(NStr::StringToInt8(CTempString(m_Ch, len))); m_Ch += len; return CJsonNode::NewNumberNode(val); } case 'F': case 'f': case 'N': case 'n': case 'T': case 't': case 'Y': case 'y': while (len <= max_len && isalpha(m_Ch[len])) ++len; { bool val(NStr::StringToBool(CTempString(m_Ch, len))); m_Ch += len; return CJsonNode::NewBooleanNode(val); } } return CJsonNode(); }