Parsing Google Translate response

by triclozan

JavaScript

var data = '[[["not","nem"]],[["particle",["not","no","nope","nay"],[["not",["nem","ne"],,0.35656098],["no",["nem","nincs"],,0.041924916],["nope",["dehogy","nem"]],["nay",["sőt, mi több","nem"]]],"nem",19],["prefix",["non-","un-"],[["non-",["nem"],,0.03758125],["un-",["nem"]]],"nem",11],["noun",["sex","genus"],[["sex",["szex","nem","nemi aktus"]],["genus",["nemzetség","nem"]]],"nem",1]],"hu",,,[["nem",1,[["not",682,true,false],["no",317,true,false],["non",0,true,false],["is not",0,true,false],["does not",0,true,false]],[[0,3]],"nem",0,1]],0.025042934,,[["hu"],,[0.025042934]],,,,,,[["Nem!","NEM","nem működik","nem megfelelő","nem rossz","nem vagyok","nem fontos","egyáltalán nem","nem tud","nem sok","nem szükséges","nem sikerül"]]]';

var parsed;
eval('parsed=' + data);
var result = {
    translatedString: parsed[0][0][1],
    mainTranslation: parsed[0][0][0],
    translations: []
};
if (parsed[1]) {
    parsed[1].map(function (item) {
        var category = {
            partOfSpeech: item[0],
            variants: []
        };
        item[2].map(function (item) {
            category.variants.push({
                translation: item[0],
                synonyms: item[1],
                frequency: item.length == 4 ? (item[3] >= 0.05 ? 2 : 1) : 0
            });
        });
        result.translations.push(category);
    });
}
function create(htmlStr) {
    var frag = document.createDocumentFragment(),
        temp = document.createElement('div');
    temp.innerHTML = htmlStr;
    while (temp.firstChild) {
        frag.appendChild(temp.firstChild);
    }
    return frag;
}

var fragment = create('<h1>Source data</h1><pre>' + JSON.stringify(parsed, null, 4) + '</pre>');
document.body.insertBefore(fragment, document.body.childNodes[0]);

var fragment = create('<h1>Transformed result</h1><pre>' + JSON.stringify(result, null, 4) + '</pre>');
document.body.insertBefore(fragment, document.body.childNodes[0]);