JSFiddle - React, Tailwind, and code Playground

HTML

<table>
    <tr>
        <th>DogeON</th>
        <th>JSON</th>
        <th>Test</th>
    </tr>    
    <tr class="test">
        <td class="input">such "foo" is "bar" wow</td>
        <td class="output"></td>
        <td><span class="expected">{"foo":"bar"}</span><span class="result"></span></td>
    </tr>  
    <tr class="test">
        <td class="input">such "foo" is so "bar" and "baz" also "fizzbuzz" many wow</td>
        <td class="output"></td>
        <td><span class="expected">{"foo":["bar","baz","fizzbuzz"]}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td class="input">such "foo" is 42very3 wow</td>
        <td class="output"></td>
        <td><span class="expected">{"foo":42000}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td class="input">such " \"such " is "bar" wow</td>
        <td class="output"></td>
        <td><span class="expected">{" \"such ":"bar"}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td><pre class="input">such
            " such " is "very bar" wow
            </pre></td>
        <td class="output"></td>
        <td><span class="expected">{" such ":"very bar"}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td class="input">such "foo" is empty wow</td>
        <td class="output"></td>
        <td><span class="expected">{"foo":null}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td class="input">such "foo" is so no and yes many wow</td>
        <td class="output"></td>
        <td><span class="expected">{"foo":[false,true]}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td class="input">such "foo" is so "yes" and "no" many wow</td>
        <td class="output"></td>
        <td><span class="expected">{"foo":["yes","no"]}</span><span class="result"></span></td>
    </tr>
    <tr class="test">
        <td class="input">such "foo" is...

CSS

.expected { display: none }
table { border-collapse: collapse }
table td, th { border: 1px solid #ddd }

JavaScript

// Version 3very-1
// such yes, many no. and also empty? so very wow!
var dogeONtoJSON = (function () {
    var keywords = {
        "such" : "{",
        "wow" : "}",
        "is" : ":",
        "so" : "[",
        "and" : ",",
        "also" : ",",
        "many" : "]",
        "yes" : "true",
        "no" : "false",
        "empty" : "null",
        "." : ",",
        "," : ",",
        "!" : ",",
        "?" : ","
    };
       
    return function (dogeon) {    
        if (!dogeon) return {};
        var tokens = [];
        var i = 0;
        var inString = false;        
        var stringQuote = '"';
        var currentToken = "";
        var currentChar = "";
        var testNumeric = "";
        var dogeIsEscaping = false;
        
        while (i < dogeon.length) {
            currentChar = dogeon[i];
            if (!inString && currentChar == '"') {
                inString = true;
                stringQuote = currentChar;
                currentToken += currentChar;
            } else if (inString) {
                if (!dogeIsEscaping && currentChar == stringQuote) {
                    currentToken += currentChar;
                    tokens.push(currentToken);
                    inString = false;
                    currentToken = "";
                } else if (currentChar == "\\") {
                    dogeIsEscaping = true;
                    currentToken += currentChar;
                } else {
                    currentToken += currentChar;
                    dogeIsEscaping = false;
                }
            } else if (currentChar === " " ||
                       currentChar === "\n" || 
                       currentChar === "\r" || 
                       currentChar === "\t") {
                if (currentToken !== "") {
                    tokens.push(currentToken);                    
                    currentToken = "";                    
                }
            } else if (currentChar === "," ||
                      ...