2014. 10. 22. 10:35

json 용 escape 처리

json 으로 문자열을 내려보낼때 개행 같은 문자가 문자열에 포함된 경우

내용자체가 개행되서 처리될 경우 변경하는 방법


------- string 을 바로 변경하는 경우

#include <string>

#include <sstream>


std::string escapeJsonString(const std::string& input) {

    std::ostringstream ss;

    for (auto iter = input.cbegin(); iter != input.cend(); iter++) {

    //C++98/03:

    //for (std::string::const_iterator iter = input.begin(); iter != input.end(); iter++) {

        switch (*iter) {

            case '\\': ss << "\\\\"; break;

            case '"': ss << "\\\""; break;

            case '/': ss << "\\/"; break;

            case '\b': ss << "\\b"; break;

            case '\f': ss << "\\f"; break;

            case '\n': ss << "\\n"; break;

            case '\r': ss << "\\r"; break;

            case '\t': ss << "\\t"; break;

            default: ss << *iter; break;

        }

    }

    return ss.str();

}


--------- ascii char 형태인 경우 (변수는 알아서 적용할것)

for(_UInt32 i = 0; i < node->m_Value->m_Value.length(); ++i)

{

    if(node->m_Value->m_Value[i] == 34) //"

    {

        str += "\\\"";

    }

    else if(node->m_Value->m_Value[i] == 92)

    {

        str += "\\\\";

    }

    else if(node->m_Value->m_Value[i] == 13)

    {

        //str += "\\r";

    }

    else if(node->m_Value->m_Value[i] == 10)

    {

        str += "\\n";

    }

    else if(node->m_Value->m_Value[i] == 8)

    {

        str += "\\b";

    }

    else if(node->m_Value->m_Value[i] == 9)

    {

        str += "\\t";

    }

    else

        str += node->m_Value->m_Value[i];

}