2012-06-11 24 views
117

W jaki sposób JS uważa, że ​​ciąg znaków jest JSON?Konwertowanie ciągu znaków na obiekt JSON

Mam funkcję, która działa tylko wtedy, gdy obiekt JSON jest przekazywany do niego. Jeśli przekazuję do niego ciąg znaków, w tym samym formacie co JSON, to nie działa. Dlatego chcę, aby ta funkcja myślała, że ​​ciąg przekazany do niego to JSON. Łańcuch jest rzeczywiście w formacie JSON.

Próbowałem również następujące. Wprowadziłem ciąg znaków przez Ajax, z parametrem "uchwyt jako" jako "JSON", a następnie, gdy przekazałem wynik do funkcji, która działa.

Wywiodłem więc, że problem nie jest związany z ciągiem znaków. Jak przekonwertować ten ciąg na JSON? Jeśli otrzymam ten sam ciąg przez zapytanie ajax, a następnie przekazanie go do funkcji działa, podczas gdy bezpośrednie przekazanie go nie działa.

Ciąg wygląda następująco:

{ 
    "data": [ 
    { 
    "id": "id1", 
     "fields": [ 
     { 
      "id": "name1", 
      "label": "joker", 
      "unit": "year" 
     }, 
     {"id": "name2", "label": "Quantity"}, 
    ], 
     "rows": [ data here.... 

and closing braces.. 
+1

możliwy duplikat [Bezpiecznie zmieniając ciąg JSON w obiekt] (http: // stackoverflow.com/questions/45015/secure-turning-a-json-string-into-an-object) – ManseUK

+1

Twój tytuł wprowadza w błąd. Na podstawie treści twojego pytania wolałbym powiedzieć, że chcesz przekonwertować ciąg zawierający JSON na obiekt/tablicę JavaScript. –

+0

OK, rozwiązałem to. W łańcuchu było \ n. Teraz musisz tylko dowiedzieć się, jak używać JSON.parse z tym. – Zer0

Odpowiedz

298
var obj = JSON.parse(string); 

Gdzie string jest ciąg json.

+0

To nie działa. Występuje błąd "SyntaxError: JSON.parse: nieoczekiwany znak". W łańcuchu nie ma nic złego, ponieważ gdy otrzymuję ten sam ciąg przez zapytanie ajaxowe i traktuję je jako "JSON", nie ma problemu. – Zer0

+0

proszę zaksięgować swój acutalny ciąg JSON – Kshitij

+0

wysłany. Sprawdź główny post .. – Zer0

24

Można użyć JSON.parse() do tego.

See docs at MDN

Przykład:

var myObj = JSON.parse('{"p": 5}'); 
console.log(myObj); 
+0

To nie działa. Występuje błąd "SyntaxError: JSON.parse: nieoczekiwany znak". W łańcuchu nie ma nic złego, ponieważ gdy otrzymuję ten sam ciąg przez zapytanie ajaxowe i traktuję je jako "JSON", nie ma problemu. – Zer0

+2

@ Zer0: Powinieneś zaktualizować swoje pytanie tak, jak próbujesz go wraz ze swoim ciągiem json. – Sarfraz

+3

@ Zer0: Możemy tylko odpowiedzieć zgodnie z naszą najlepszą wiedzą. Mówisz, że masz ciąg JSON, na które odpowiemy. Wygląda na to, że Twój ciąg jest inny, jeśli chcesz go opublikować, możemy odpowiedzieć, biorąc to pod uwagę. Jeśli zadasz pytanie dotyczące kodowania, kod/dane są niezbędne. –

6

miałem ten sam problem z podobnym ciągiem jak twoje

{id:1,field1:"someField"},{id:2,field1:"someOtherField"} 

Problem niej jest struktura String waśń json parser W tym przypadku rozpoznaje, że musi utworzyć 2 obiekty. więc co zrobiłem to trochę głupie, po prostu ponownie zorganizowany moje ciąg i dodał [] z tego parsera uznane

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"} 
myString = '[' + myString +']' 
var json = $.parseJSON(myString) 

Nadzieja pomaga,

Jeśli ktoś ma bardziej eleganckie podejście Proszę podzielić.

+0

W powyższym kodzie skonstruowałeś 'myString' niepoprawnie.Nie jest to ciąg znaków i jest niepoprawnie sformatowany JSON, twoja druga linia stałaby się zbędna Oto, co powinno być: 'var myString = '[{" id ": 1," field1 ":" someField "}, {" id ": 2," field1 ":" someOtherField "}]'' Wiem, że to dość stary post, ale pomyślałem, że dodam trochę jasności na wypadek, gdyby ktoś go znalazł. –

0

JSON.parse() Funkcja zrobi.

lub

jQuery,

var obj = jQuery.parseJSON('{ "name": "Vinod" }'); 
alert(obj.name === "Vinod"); 
2
var Data=[{"id": "name2", "label": "Quantity"}] 

Pass zmienną ciąg do Json parse:

Objdata= Json.parse(Data); 
+0

W twoim przykładzie 'Dane' jest już obiektem, więc nie trzeba go analizować. Będziesz potrzebował kilku cytatów otaczających wszystkie Twoje dane, aby uczynić je ciągiem. –

0

Wystarczy użyć eval funkcję.

Powiązane problemy