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!

1
Rachel 14 sierpień 2014, 12:16

3 odpowiedzi

Najlepsza odpowiedź

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.

0
chm-software.com 14 sierpień 2014, 08:33

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]);

http://jsfiddle.net/qu9gxcyb/

0
Volune 14 sierpień 2014, 08:31

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
0
user3917789 14 sierpień 2014, 08:38