문제

다음과 같은 경우:

{"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 += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top