Quick actions

cmd+k|ctrl+k

Navigation

Languages

escapejosn.cpp

Snippet info

Language

Cpp

Visibility

public

Author

legacy-v1-32

Created

2016-12-21T08:57:15Z

Updated

2016-12-22T10:03:13Z

#include <iostream>

#include <sstream>
#include <iomanip>
using namespace std;
std::string EscapeJsonString(const std::string &s) {
    std::ostringstream o;

    for (std::string::const_iterator c = s.begin(); c != s.end(); c++) {
    //for (auto c = s.cbegin(); c != s.cend(); c++) {
        switch (*c) {
        case '"': o << "\\\""; break;
        case '\\': o << "\\\\"; break;
        case '\b': o << "\\b"; break;
        case '\f': o << "\\f"; break;
        case '\n': o << "\\n"; break;
        case '\r': o << "\\r"; break;
        case '\t': o << "\\t"; break;
        default:
            if ('\x00' <= *c && *c <= '\x1f') {
                o << "\\u"
                  << std::hex << std::setw(4) << std::setfill('0') << (int)*c;
            } else {
                o << *c;
            }
        }
    }
    return o.str();
}
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();
    
}

std::string escape_json(const std::string &s) {
    std::ostringstream o;
    for (auto c = s.cbegin(); c != s.cend(); c++) {
        switch (*c) {
        case '\x00': o << "\\u0000"; break;
        case '\x01': o << "\\u0001"; break;
        case '\x0a': o << "\\n"; break;
        case '\x1f': o << "\\u001f"; break;
        case '\x22': o << "\\\""; break;
        case '\x5c': o << "\\\\"; break;
        default: o << *c;
        }
    }
    return o.str();
}

int main() {
    string s = "\tHello''\"''\\ Wor\nld!";

    cout << "Hello'''''' World!"<<endl;
    cout << escapeJsonString(s)<<endl;
    cout << escape_json(s)<<endl;
    cout << "test" + EscapeJsonString(s) <<endl;
    return 0;
}
INFO