Parsuję kilka danych za pomocą klasy typu w moim kontrolerze. Otrzymuję dane w następujący sposób:
{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}
Próbowałem przechowywać dane w ten sposób
var userData = _data;
var newData = JSON.parse(userData).data.userList;
Jak wyodrębnić listę użytkowników do nowej zmiennej?
javascript
angularjs
json
Soniya Mohan
źródło
źródło
JSON.parse
. Spróbuj użyćuserData
bezpośrednio jako obiektu.console.log(typeof userData)
wyświetli się,object
masz już obiekt javascript, a nie ciąg JSON, który musisz przeanalizować.Unexpected token o in JSON
pojawia się ten błąd - najprawdopodobniej próbujesz przeanalizować obiekt, który jest już w sparsowanej formie.Odpowiedzi:
Opublikowany przez Ciebie kod JSON wygląda dobrze, jednak w Twoim kodzie najprawdopodobniej nie jest to już ciąg JSON, ale już obiekt JavaScript. Oznacza to, że nie jest konieczne dalsze analizowanie.
Możesz to sprawdzić samodzielnie, np. W konsoli Chrome:
JSON.parse()
konwertuje dane wejściowe na ciąg.toString()
Metoda JavaScript obiektów domyślnie powrotów[object Object]
, w wyniku obserwowanego zachowania.Zamiast tego spróbuj wykonać następujące czynności:
źródło
pierwsze parametry funkcji
JSON.parse
powinny być typu String, a Twoje dane to obiekt JavaScript, więc zostaną przekonwertowane na String[object object]
, którego należy użyćJSON.stringify
przed przekazaniem danychźródło
Nigdy nie używaj
JSON.parse
bez zawijania go wtry-catch
blok:źródło
Tuż powyżej
JSON.parse
użyj:źródło
JSON.stringify()
konwertuje obiekt JavaScript na jego reprezentację w postaci łańcucha, co jest przeciwieństwem tego, coJSON.parse()
robi. Otrzymałeś,SyntaxError
ponieważ próbowałeś przeanalizować coś, co już było obiektem. W rozwiązaniu @ Sukhchain jest konwertowany na łańcuch, aby tego uniknąć.JSON.parse()
zbyt dużo nadmiaru. Mimo że jest to dość szybki proces, analizowanie JSON odbywa się synchronicznie i może potencjalnie blokować interfejs użytkownika, więc odradzałbym używanie tego. Zamiast tego możesz sprawdzić, czy zmienna jest obiektem, na przykład używająctypeof(userData) === 'object'
przed próbą jej przeanalizowania.Cóż, miałem na myśli, że muszę analizować obiekt tak:
var jsonObj = {"first name" : "fname"}
. Ale tak naprawdę nie mam. Ponieważ jest to już JSON.źródło
Możemy również dodać takie kontrole:
źródło
Nieoczekiwany błąd „O” jest generowany, gdy dane JSON lub String są analizowane.
Jeśli jest to string, to jest już stringfied. Parsowanie kończy się nieoczekiwanym błędem „O”.
Napotkałem podobny (choć w innym kontekście), rozwiązałem następujący błąd, usuwając JSON Producer.
Odpowiedź zawiera zwrotny ciąg znaków „OK” . Adnotacja oznaczona jako @Produces ({** MediaType.APPLICATION_JSON }) ** próbuje przeanalizować ciąg do formatu JSON, co skutkuje nieoczekiwanym „O” .
Usunięcie @Produces ({ MediaType.APPLICATION_JSON }) działa dobrze. Wyjście: OK
Uwaga: po stronie klienta, jeśli wyślesz żądanie Ajax i użyjesz JSON.parse („OK”), wyrzuci nieoczekiwany token „O”
O to pierwsza litera ciągu
JSON.parse (obiekt) porównuje z jQuery.parseJSON (obiekt);
JSON.parse ('{"name": "Yergalem", "city": "Dover"}'); --- Działa w porządku
źródło