키/값 쌍을 가져오기 위해 Javascript에서 JSON 응답 구문 분석
Javascript에서만 각 오브젝트의 이름과 값을 얻을 수 있는 방법은 무엇입니까?
오브젝트 속성에 액세스하는 방법에는 다음 두 가지가 있습니다.
var obj = {a: 'foo', b: 'bar'};
obj.a //foo
obj['b'] //bar
또는 동적으로 수행해야 하는 경우:
var key = 'b';
obj[key] //bar
아직 개체로 가지고 있지 않은 경우 변환해야 합니다.
좀 더 복잡한 예에서는 사용자를 나타내는 오브젝트 배열이 있다고 가정합니다.
var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
{name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];
두 번째 사용자의 연령 속성에 액세스하려면users[1].age
첫 번째 사용자의 두 번째 "즐겨먹는 음식"에 액세스하려면users[0].favoriteFoods[2]
.
또 다른 예는 다음과 같습니다.obj[2].key[3]["some key"]
2라는 이름의 배열의 세 번째 요소에 액세스합니다.그런 다음 해당 배열의 '키'에 액세스하고 그 세 번째 요소로 이동한 다음 속성 이름에 액세스합니다.some key
.
Amadan이 지적한 바와 같이, 다른 구조물을 루프하는 방법에 대해서도 논의할 가치가 있을 수 있다.
배열을 루프하려면 단순 for 루프를 사용할 수 있습니다.
var arr = ['a', 'b', 'c'],
i;
for (i = 0; i < arr.length; ++i) {
console.log(arr[i]);
}
물체를 루프하는 것은 조금 더 복잡합니다.오브젝트가 플레인 오브젝트라고 절대적으로 확신하는 경우에는 플레인 오브젝트를 사용할 수 있습니다.for (x in obj) { }
루프이지만 hasOwnProperty 체크에 추가하는 것이 훨씬 안전합니다.이는 개체에 상속된 속성이 없는지 확인할 수 없는 경우에 필요합니다.(또, 장래의 코드도 약간 증명됩니다.)
var user = {name: 'Corbin', age: 20, location: 'USA'},
key;
for (key in user) {
if (user.hasOwnProperty(key)) {
console.log(key + " = " + user[key]);
}
}
(사용하시는 JS 구현에 따라서는console.log
그렇지 않은 경우,alert
또는 DOM 조작의 종류도 있습니다).
Github에서 더글라스 크록포드의 JSON 파서를 사용해 보세요.다음으로 다음과 같이 String 변수에서 JSON 객체를 작성할 수 있습니다.
var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}'
var JSONObject = JSON.parse(JSONText);
var c = JSONObject["c"];
var o = JSONObject["o"];
JS 코드는 다음과 같습니다.
var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}')
for (var event in data) {
var dataCopy = data[event];
for (data in dataCopy) {
var mainData = dataCopy[data];
for (key in mainData) {
if (key.match(/name|value/)) {
alert('key : ' + key + ':: value : ' + mainData[key])
}
}
}
}
var yourobj={
"c":{
"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]
},
"o":{
"v":[{"name":"over the ear headphones - white/purple","value":1}]
},
"l":{
"e":[{"name":"lens cleaner","value":1}]
},
"h":{
"d":[{"name":"hdmi cable","value":1},
{"name":"hdtv essentials (hdtv cable setup)","value":1},
{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]
}}
- 우선 정리하는 것은 좋은 생각이다
- 최상위 참조는 a..v...보다 더 편리한 이름이어야 합니다.기타
- o.v.o.i.e.에서는 어레이 []가 1개의 json 엔트리이므로 필요 없습니다.
나의 해결책
var obj = [];
for(n1 in yourjson)
for(n1_1 in yourjson[n])
for(n1_2 in yourjson[n][n1_1])
obj[n1_2[name]] = n1_2[value];
승인코드
for(n1 in yourobj){
for(n1_1 in yourobj[n1]){
for(n1_2 in yourobj[n1][n1_1]){
for(n1_3 in yourobj[n1][n1_1][n1_2]){
obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value;
}
}
}
}
console.log(obj);
결과
* [] 메서드 또는 도트 표기 사용 시 악세사리를 구분해야 합니다.
언급URL : https://stackoverflow.com/questions/14028259/json-response-parsing-in-javascript-to-get-key-value-pair
'programing' 카테고리의 다른 글
Chrome은 뒤로 버튼을 누르면 Ajax 응답을 표시합니다. (0) | 2023.03.02 |
---|---|
JSON 프로토콜을 사용하여 버전 관리를 처리하는 가장 좋은 방법은 무엇입니까? (0) | 2023.02.25 |
Reactjs의 react-router-dom 버전5에서의 리다이렉트 사용 방법 (0) | 2023.02.25 |
스크립트가 완전히 로드되어 실행되었을 때 jquery .getscript() 콜백 (0) | 2023.02.25 |
리액트 훅의 '유출 감소' 보풀 규칙 이해 (0) | 2023.02.25 |