문제
다음과 같은 경우:
{"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"}
{"Make":"Toyota","Model":"Corolla","Year":"2008"}
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
}
그리고 저는 "hdrs" 이름을 가지고 있습니다(예:"만들기"), 어떻게 참조할 수 있나요? data
배열 인스턴스?것 같아 data["Make"][0]
작동해야 하지만 올바른 참조를 얻을 수 없습니다.
편집하다
모호해서 죄송합니다..반복할 수 있어요 hdrs
각 hdr 이름을 얻으려면 다음의 각 인스턴스 값을 사용해야 합니다. hdrs
모든 데이터 요소를 찾으려면 data
(이것이 더 나은 설명인지 확실하지 않습니다).그리고 나는 그것을 변수에 넣을 것입니다 t
JSON이므로(다시 태그 지정해 주셔서 감사합니다) 다음과 같이 참조할 수 있기를 바랍니다. t.data[hdrs[i]][j]
해결책
코드를 약간 변경해야 했습니다.
var x = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
alert( x.data[0].Make );
편집하다:귀하의 수정사항에 대한 응답으로
var x = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
alert( x.data[i][x.hdrs[Header]] );
}
다른 팁
그래서 이렇게요?
var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];
내가 당신을 올바르게 이해하고 있다면 효과가 있을 것입니다...
var x = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"}
{"Make":"Toyota","Model":"Corolla","Year":"2008"}
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
x.data[0].Make == "Honda"
x['data'][0]['Make'] == "Honda"
배열/해시 조회가 거꾸로 있습니다 :)
귀하의 질문을 제가 잘 이해했는지는 모르겠습니다만...
위의 JSON이 var obj라고 가정하면 다음이 필요합니다.
obj.data[0]["Make"] // == "Honda"
첫 번째 헤더에서 참조하는 필드를 참조하려는 경우 다음과 같습니다.
obj.data[0][obj.hdrs[0]] // == "Honda"
첫째, 데이터 배열 항목에서 후행 쉼표를 잊어버렸습니다.
다음을 시도해 보세요:
@켄트 프레드릭:마지막 쉼표는 꼭 필요한 것은 아니지만 줄을 더 쉽게 이동할 수 있게 해줍니다. 하나.내 생각엔 항상 뒤에 쉼표를 두는 것이 가장 좋은 것 같아요.)var obj_hash = { "hdrs": ["Make","Model","Year"], "data" : [ {"Make":"Honda","Model":"Accord","Year":"2008"}, {"Make":"Toyota","Model":"Corolla","Year":"2008"}, {"Make":"Honda","Model":"Pilot","Year":"2008"}, ] };
var ref_data = obj_hash.data;
alert(ref_data[0].Make);
아마도 data[0].Make를 시도해 보세요.
닫기, 당신은 사용할 것입니다
var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
표시된 코드가 구문상 올바르지 않습니다.쉼표가 필요합니다.나는 이것을 작동시켰다:
$foo = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
그런 다음 다음과 같이 데이터에 액세스할 수 있습니다.
$foo["data"][0]["make"]
답변의 도움으로 (그리고 내부 및 외부 루프를 올바르게 얻은 후) 다음이 작동하도록 했습니다.
var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
myTable += "<tr>";
for (var j = 0; j < t.hdrs.length; j++) {
myTable += "<td>" ;
if (t.data[i][t.hdrs[j]] == "") {myTable += " " ; }
else { myTable += t.data[i][t.hdrs[j]] ; }
myTable += "</td>";
}
myTable += "</tr>";
}