Mam ciąg jako
string = "firstName:name1, lastName:last1";
teraz potrzebuję jednego obiektu obj takiego
obj = {firstName:name1, lastName:last1}
Jak mogę to zrobić w JS?
javascript
string
object
Rahul
źródło
źródło
Odpowiedzi:
W rzeczywistości najlepszym rozwiązaniem jest użycie JSON:
Dokumentacja
JSON.parse(text[, reviver]);
Przykłady:
1)
2)
3) Przekazywanie funkcji do JSON
źródło
eval
później.Twój sznurek wygląda jak sznurek JSON bez nawiasów klamrowych.
Powinno to wtedy działać:
źródło
obj = eval('({' + str + '})');
Jeśli dobrze rozumiem:
Zakładam, że nazwa właściwości znajduje się po lewej stronie dwukropka, a wartość ciągu, który przyjmuje, jest po prawej stronie.
Pamiętaj, że
Array.forEach
jest to JavaScript 1.6 - możesz użyć zestawu narzędzi dla maksymalnej kompatybilności.źródło
Ten prosty sposób ...
wynik
źródło
jeśli używasz JQuery:
PAMIĘTAJ: eval jest złe! :RE
źródło
eval
.globalEval: /** code **/ window[ "eval" ].call( window, data ); /** more code **/
Ponieważ metoda JSON.parse () wymaga, aby klucze Object były zawarte w cudzysłowach, aby działała poprawnie, musielibyśmy najpierw przekonwertować ciąg na łańcuch sformatowany w JSON przed wywołaniem metody JSON.parse ().
Działa to nawet wtedy, gdy ciąg znaków ma złożony obiekt (jak poniżej) i nadal będzie poprawnie konwertowany. Upewnij się tylko, że sam łańcuch jest ujęty w pojedyncze cudzysłowy.
źródło
Musisz użyć JSON.parse () do konwersji Ciągu na Obiekt:
źródło
Jeśli masz ciąg znaków
foo: 1, bar: 2
, możesz przekonwertować go na prawidłowy obiekt obj:Podziękowania dla czarnucha w #javascript za to.
Aktualizacja z objaśnieniami:
Mylące dokumenty MDN:
Demo: http://jsbin.com/hiduhijevu/edit?js,console
Funkcjonować:
źródło
Zaimplementowałem rozwiązanie w kilku liniach kodu, które działa całkiem niezawodnie.
Posiadanie takiego elementu HTML, w którym chcę przekazać niestandardowe opcje:
funkcja analizuje opcje niestandardowe i zwraca obiekt, aby go gdzieś użył:
źródło
data-
atrybutu zamiast tworzenia pseudo-niestandardowych atrybutów, takich jak niektóre frameworki / biblioteki.To zadziała:
Jednak to nie jest wydajne. Co się dzieje, gdy masz coś takiego:
split()
podzieli „http”. Sugeruję więc użycie specjalnego separatora, takiego jak potokźródło
To jest uniwersalny kod, bez względu na to, jak długo dane wejściowe są długie, ale w tym samym schemacie, jeśli istnieje: separator :)
źródło
Używam JSON5 i działa całkiem dobrze.
Zaletą jest to, że nie zawiera
eval
i nienew Function
, bardzo bezpieczny w użyciu.źródło
W Twoim przypadku
źródło
Tablica „obiektów” będzie zawierała wszystkie obiekty
źródło
Wiem, że to stary post, ale nie widziałem poprawnej odpowiedzi na pytanie.
Teraz możesz użyć
obj.firstName
i,obj.lastName
aby uzyskać wartości, tak jak normalnie z obiektem.źródło