JSON parser vs eval (v8)

Revision 8 of this benchmark created on


Preparation HTML

<script src="http://ajax.googleapis.com/ajax/libs/ext-core/3/ext-core.js"></script>
<script src="http://cdn.sencha.com/ext/gpl/5.0.1/build/ext-all.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://json-sans-eval.googlecode.com/svn/trunk/src/json_sans_eval.js"></script>

<script>
var mystr='{"Mandatory":"OK","Optional":"KO"}';
var invalid='{Mandatory:"OK",Optional:"KO"}';
var fix1 = /\{(\s*[a-zA-Z0-9_]+\s*):/mg;
var fix2 = /,(\s*[a-zA-Z0-9_]+\s*):/mg;

function parseOrEval(value) {
        if(/\{\s*[a-zA-Z0-9_]+\s*:/.test(value) || /,\s*[a-zA-Z0-9_]+\s*:/.test(value)) {
                return eval('(' + value + ')');
        }
        else {
                return JSON.parse(value);
        }
}

function parseOrEval2(value) {
        if(/\{\s*[a-zA-Z0-9_]/.test(value) || /[a-zA-Z0-9_]\s*:/.test(value)) {
                return eval('(' + value + ')');
        }
        else {
                return JSON.parse(value);
        }
}
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
JSON Parser
var res=JSON.parse(mystr);
ready
eval
var res=eval('('+mystr+')');
ready
jQuery
var res=jQuery.parseJSON(mystr);
ready
function
var res=(new Function('return ('+mystr+')'))();
ready
Ext core
var res=Ext.util.JSON.decode(mystr);
ready
ExtJs 5.0.1
var res=Ext.JSON.decode(mystr);
ready
json-sans-eval
var res=jsonParse(mystr);
ready
JSON Parser & Fixed JSON
var res=JSON.parse(invalid.replace(fix1, '{"$1":').replace(fix2, ',"$1":'));
ready
parseOrEval - parse
var res=parseOrEval(mystr);
ready
parseOrEval - eval
var res=parseOrEval(invalid);
ready
parseOrEval2 - parse
var res=parseOrEval2(mystr);
ready
parseOrEval2 - eval
var res=parseOrEval2(invalid);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.