키 / 값 쌍을 얻기 위해 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합니다. 첫 번째 사용자의 두 번째 "favoriteFood"에 액세스하려면 users[0].favoriteFoods[2].
또 다른 예: obj[2].key[3]["some key"]
그러면 2라는 배열의 세 번째 요소에 액세스합니다. 그런 다음 해당 배열의 'key'에 액세스하고 그 세 번째 요소로 이동 한 다음 속성 이름에 액세스합니다 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 에서 Douglas Crockford의 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 ... 등보다 편리한 이름이어야합니다.
- ov, oie 하나의 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);
결과
* [] 방법 또는 점 표기법을 사용할 때는 구분 액세서리를 사용해야합니다.

'Nice programing' 카테고리의 다른 글
| RSpec stubbed 메서드가 순서대로 다른 값을 반환 할 수 있습니까? (0) | 2020.11.26 |
|---|---|
| 웹 애플리케이션에서 Log4Net 구성 (0) | 2020.11.26 |
| '잘못된 업데이트 : 섹션 0의 잘못된 행 수 (0) | 2020.11.26 |
| Youtube api v3 사용자 동영상 목록 가져 오기 (0) | 2020.11.26 |
| ActiveRecord where field =? (0) | 2020.11.26 |