Autor Zpráva
joe
Profil
Ahoj,

nějak jsem se zasekl na celkem triviální věci. Mám string a potřebuju z něj dostat objekt.

var test = "{id:10}"; // potrebuju ziskat objekt {id:10}

console.log($.parseJSON(test)); // hlásí chybu  Uncaught Invalid JSON: {id:10}



živá ukázka v jQuery zkoušečce.

Nechápu proč to nejde, používám stejný způsob při AJAXu a pokud se dívám dobře, data jsou v úplně stejném formátu, ale tady mi to hlásí chybu...

Víte někdo čím to je a co s tím udělat, aby to šlo převést (nemusí to být přes jQuery, to je jen pro živou ukázku)

Díky
ShiraNai7
Profil
jQuery.parseJSON('{id:10}')
joe
Profil
ShiraNai7:
Je (snad) nějaký rozdíl mezi tím, co jsi poslal a co jsem napsal já?

(tady do kódu jsem nepsal to volání té funkce, čekal jsem, že to z toho bude jasné - doplním)
ShiraNai7
Profil
joe:

Ne, neotevíral jsem to vůbec.
Takhle... pokud ti to jde přes jQuery, tak proč to tak neděláš? Další možnosti jsou už jen eval() nebo jiná knihovna.
joe
Profil
ShiraNai7:
Nejde mi to vůbec, ani přes eval, ani přes jQuery
ShiraNai7
Profil
joe:

Protože {id:10} není správně formátovaný json řetězec. Správně je {"id": 10}

viz http://api.jquery.com/jQuery.parseJSON/
Chamurappi
Profil
Reaguji na ShiraNaiho7:
Ne, neotevíral jsem to vůbec.
Ono je to napsané v prvním příspěvku, nebylo nutné nic otevírat.


Reaguji na joa:
Nevím, proč nejde ta funkce v jQuery, ale eval("({id: 10})") jede spolehlivě. Kulaté závorky kolem struktury jsou nutné, aby se kód začínající chlupatou závorkou nebral jako blok příkazů.
joe
Profil
Chamurappi:
Ono je to napsané v prvním příspěvku
Nebylo :-)

Kulaté závorky kolem struktury jsou nutné...
Tak to mi chybělo...

ShiraNai7:
Správně je {"id": 10}
Ahá...

Díky, ušetřili jste mi další půl hodiny dumání nad tím, proč to nejde.

Ta funkce v jQuery zase funguje bez kulatých závorek a musí tam být ty uvozovky.
Igor
Profil
Mám podobný problém, ale s řetězcem ve formátu pole.
columns = "["cat","html","diff","desc"]";

Zkoušel jsem $.parseJSON() a jQuery.parseJSON() ale obojí dělá chybu, kterou se mi nepovedlo určit. Na těchto stránkách bylo řečeno, že eval() je zlo, tak co mám dělat?
Witiko
Profil
Igor:
tak co mám dělat?
Pochopit, že uvozovky uvnitř řetězce je nutné escapovat?
var columns = "[\"cat\",\"html\",\"diff\",\"desc\"]";

že eval() je zlo
Divil bych se, kdyby samo jQuery pod kapotou eval v metodě parseJSON nepoužívalo, pokud není dostupná v prohlížeči vestavěná metoda JSON.parse.
Igor
Profil
Witiko:
Myslíš jako nepsat to ručně? On ten řetězec je vygenerovaný pomocí:
... JSON.stringify(getSelected(\"$columns\"))... ;

(Je to část kódu php určené pro html atribut a.onclick, proto je tam dolar a vyescapované uvozovky)

Divil bych se, kdyby samo jQuery pod kapotou eval v metodě parseJSON nepoužívalo
Asi si chtěl napsat "Divil bych se, kdyby samo jQuery pod kapotou parseJSON eval nepoužívalo." Taky jsem na to myslel, ale tak jestli to nejde jinak, tak eval použiju.
Witiko
Profil
Igor:
Asi si chtěl napsat
To jsem taky napsal, ty věty jsou smyslem totožné. Pokud prohlížeč podporuje nativní objekt JSON, tak bych tipoval že jQuery použije ten, jinak eval.

jestli to nejde jinak, tak eval použiju.
Cokoliv vytvořené JSON.stringify je zpětně rozparsovatelné JSON.parse. Dej nám živou ukázku.
Chamurappi
Profil
Reaguji na Igora:
Pokud je columns javascriptová proměnná, tak nechápu, proč do ní generuješ řetězec s JSONem a ne přímo ten objekt.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0