Lucrez cu doua API-uri (unul facut in python si celalalt in php) care imi returneaza un json care este un array de obiecte, fiecare obiect are perechi de cheie-valoare, unde valorile sunt alte obiecte si tot asa.
In unul din obiectele “mari” (primele din interiorul array ului), am o cheie numita “discount”, care are ca valoare un obiect care ar trebui sa fie {"percent": 30}, dar este "{\"percent\":30}"
Raspunul ar fi ceva de genul: [{"name": "gigel", "type":"Worker", "discount": "{\"percent\":30}"}, {"name": "ionut", "type":"staff", "discount": "{\"percent\":20}"}]
Vad ca pot sa il parsez cu JSON.parse(), in consola (din Chrome) imi arata discount: "{"percent":30}"-> fara backslash (dar apare ca string, nu mi-l arata ca obiect un cu cheie/valoare care poate fi expandat).
Lucrez cu javascript vanilla + jquery.
Intrebarile ar fi:
Cum pot sa parsez/abordez elemente care sunt escaped cu backslash? (am presupus ca sunt escaped, nu stiu exact daca asta a fost scopul in urma caruia cel care a facut asta a adaugat si backslash)
De ce ai pune backslash? Am in alta parte alt raspuns de la alt api, dar din acelasi proiect, care, inainte de TOATE ghilimelele duble are backslash. De ce si pentru ce?
Si e posibil ca backslashul sa cauzeze probleme cand parsez? Ar trebui sa ma ingrijesc sa scot eu backslash urile din raspuns inainte sa fac vreo operatie cu el?
thanx
atunci fa o sesizare catre cine a facut API-ul. nu e JSON valid, si chiar daca il rezolvi tu pentru faza asta e posibil sa iti dea batai de cap in alta parte.
daca nu ai la cine sa faci sesizare le poti trata individual, dupa ce le convertesti in obiect in JS, le iei la verificat daca sunt string si daca incep cu {. dar n-as recomanda varianta asta. sa-si faca fiecare treaba cum trebuie!
pot sa te intreb aici de ce ai facut JSON.stringify() inainte de JSON.parse() ? JSON.stringify() mai ajuta si la altceva in afara sa transforme raspunsul in string?(oricum il primesc ca string)
l8er edit: in cazul meu daca ii dau JSON.stringify() inainte, si dupa il parsez cu JSON.parse(), nu mi-l mai parseaza, mi-l arata in consola ca string…
e interesant ca apare backslash doar acolo unde NU e json valid, adica doar acolo unde a pus ghilimele inaintea acoladei (si in acelasi timp e cel mai “adanc” nivel de adancime in obiect)
Ce nu cred că realizezi este că JSON-ul ăla este valid și încerci să repari ceva ce nu este neapărat… defect.
Problema ta este că un anumit element din json este escaped extra. Nu intrăm în motivele pentru care se întâmplă asta (pentru că nu ai control asupra acestui lucru), dar tu ai așa:
data = {
"discount": "{\"percent\":30}"
}
Altfel spus, tu ai: data.discount = "{\"percent\":30}".
Dacă nu poți repara API-ul, poți parsa încă o dată acel discount:
data.discount = JSON.parse( data.discount )
Sau, dacă vrei să tratezi problema la nivel global, treci prin tot obiectul când îți vine din api: