Jestem nowy w języku JS i próbowałem zrozumieć, jak działa obiekty.
var string = JSON.stringify({name: "X", born: 1980});
console.log(string);
// → {"name":"X","born":1980}
Z ciekawości wypróbowałem następujące metody, aby uzyskać dostęp do nieruchomości "Urodzony", podczas gdy obiekt jest w formacie JSON.
console.log(string["born"]);
// → undefined
Myślę, że to nie działa, ponieważ nawet jeśli ciąg zmiennych znajduje się w formacie Obiektu JavaScript {Nazwa: "X", Urodzony: 1980}, zadzwonić do 1980 roku, wymagałoby tego samego konsoli ekspresyjnej.log (ciąg ["urodzony" ]).
console.log(string[""born""]);
// → Uncaught SyntaxError: Unexpected identifier
console.log(string["\"born\""]);
// → Uncaught SyntaxError: Unexpected identifier
Mam wrażenie, że są to tylko kody, które doświadczyli programistów powiedzą, że w ogóle nie ma sensu. Ale chciałem ich wypróbować, aby jednak zobaczyć dla siebie.
Czy jest jakiś sposób, aby uzyskać dostęp do nieruchomości obiektu, podczas gdy obiekt jest w formacie JSON, oprócz przy użyciu JSON.PARSE na zmiennym ciągiem? Czy ktoś może pomóc wyjaśnić, dlaczego różne sposoby, w jakie próbowałem zwrócić niezdefiniowany lub błąd? Byłoby bardzo pomocne dla mojego zrozumienia.
Dzięki za pomoc!
3 odpowiedzi
Nie można uzyskać dostępu do właściwości, ponieważ Twój obiekt "nie jest wewnętrznie przechowywany lub reprezentowany tak, jak się spodziewasz.
JSON.stringify()
Zwraca obiekt typu ciąg , który oferuje właściwości i metody opisane w dokumentacji.
Jeśli chcesz "uzyskać dostęp", możesz oczywiście użyć split()
lub indexOf()
, aby zmodyfikować swój ciąg i uzyskać wartość, ale może to być trudna i twarda droga.
Nie widzę powodu, aby nie używać JSON.parse()
Uzyskaj dostęp do obiektu tak, jak ma być używany.
Parse the json z powrotem do obiektu lub jeśli wiesz, co zawiera JSON, możesz spróbować z regexp:
var string = JSON.stringify({name: "X", born: 1980});
console.log(string)
//SOLUTION 1
var object = JSON.parse(string);
console.log('from parsed json ', object['born']);
//SOLUTION 2
//warning: this regexp is simple and will not work with any input
var match = string.match(/"born":\s*(true|false|null|\d+|"[^"]*")\s*[,}]/)
console.log('from regexp ', match[1]);
Ponieważ twój zmienna ciąg nie ma urodzony -property. Miałeś obiekt i konwertujesz go na ciąg, jeśli chcesz uzyskać nieruchomość z obiektu, musisz użyć obiektu. F.e.
var obj = {name: "X", born: 1980};
console.log(obj.born); // also you can write obj["born"] if you want
var string = JSON.stringify(obj); // this string doesn't have property "born" it has the whole JSON of your object