2016-06-28 2 views
1

Мой компонент coldfusion возвращает данные формата JSON. Я пытаюсь получить доступ к значениям этих данных в моем интерфейсе, используя Javascript. Может ли кто-нибудь помочь мне понять, как получить доступ к значениям данных, таким как «id», «firs_name» и «last_name»?Получение данных из структуры JSON

Я сохраняю следующие данные в переменной tempData. Ниже представлена ​​структура JSON я получаю:

{ "COLUMNS" : [ "id", 
     "FIRST_NAME", 
     "LAST_NAME" 
    ], 
    "DATA" : [ [ "xxxx", 
     "Jes", 
     "Abr" 
     ], 
     [ "xxx2", 
     "JESSIE", 
     "YU" 
     ] 
    ] 
} 

Ниже мой Аякса вызов:

$.ajax({ 
    type: "get", 
    url: "GROUPSLIST.cfc", 
    data: { 
     method: "getNames", 
     queryString: selectQuery 
    }, 
    success: function(a) { 
     alert(a); 
    }, 
    error: function(a) { 
     alert(a.responseText); 
    } 
});  
+0

Вы искали что-то вроде «Parse JSON» «Access JSON» ...? Например, в соответствующем столбце (рядом с этим вопросом) у вас есть: http://stackoverflow.com/questions/4935632/parse-json-in-javascript?rq=1 – yuriy636

+0

JSON в вашем вопросе выглядит так, как будто это может быть из вызова SerializeJSON (yourQuery). Это так? Если это так, и вы используете CF11, вы можете использовать SerializeJSON (yourQuery, «struct»), который вернет более удобный набор JSON. – snackboy

+0

Я считаю, что я использую 8 или 9. Также я попробовал поиск Access Json, и многие из них говорят, что используют tempData [0] .id. Это не работает для меня. Я новичок в JSON и coldfusion. – user2997109

ответ

3

Я предполагаю, что ваш ответ не разбирается уже. Вы можете использовать что-то вроде следующего.

var tempData = '{"COLUMNS":["id","FIRST_NAME","LAST_NAME"],"DATA":[["xxxx","Jes","Abr"],["xxx2","JESSIE","YU"]]}'; 
 
//parse response if not already parsed 
 
var respObj = JSON.parse(tempData); 
 
var columns = respObj['COLUMNS']; 
 
//create a column map to index like following 
 
var colMap = {}; 
 
for(i = 0; i < columns.length; i++){ 
 
    colMap[columns[i]] = i; 
 
} 
 
console.log(colMap) 
 
var data = respObj['DATA']; 
 
var text = '' 
 
//use data[i][colMap['id']] to access data inside loop. 
 
for(i = 0; i < data.length; i++){ 
 
    text += data[i][colMap['id']] + ':' +data[i][colMap['FIRST_NAME']] + ' ' + data[i][colMap['LAST_NAME']] + '<br>'; 
 
} 
 
document.getElementById('text').innerHTML = text;
<div id="text"></div>

+0

Большое спасибо за код. Это работает!! – user2997109

0

Это может быть также помочь при использовании полной БД запроса и доступа столбца (например: employee_id, employee_name)

Шаг-1

// return in serializeJSON format with true 
<cffunction name="employeelistJson" returntype="any" returnformat="JSON"> 
     <cfquery name="employeelist" datasource="yourdatasource"> 
      select * from employee 
     </cfquery> 
    <cfset setJson = #serializeJSON(employeelist,true)#> 
    <cfreturn setJson /> 
</cffunction> 

Step- 2 доступ к данным json по названию

success: function(response) { 
    //must be in caps 
    alert(response.DATA['EMPLOYEEID']); 
    alert(response.DATA['EMPLOYEENAME']);        
    }, 
Смежные вопросы