고유 한 키 이름/값 쌍을 위해 JSON을 "필터"하려면 어떻게해야합니까?
-
03-07-2019 - |
문제
LAT/LNG 등과 같은 정보가있는 언어 목록을 제공하는 JSON 데이터가 있습니다. 아이콘에 사용하는 그룹 값도 포함되어 있으며 전설을 작성하고 싶습니다. JSON은 다음과 같이 보입니다.
{"markers":[
{"language":"Hungarian","group":"a", "value":"yes"},
{"language":"English", "group":"a", "value":"yes"},
{"language":"Ewe", "group":"b", "value":"no"},
{"language":"French", "group":"c", "value":"NA"}
]}
그리고 나는 다음과 같이 끝나기 위해 "필터"하고 싶습니다.
{"markers":[
{"group":"a", "value":"yes"},
{"group":"b", "value":"no"},
{"group":"c", "value":"NA"}
]}
지금은 jQuery를 사용하여 전설을 만들었습니다. 그러나 물론 모든 값을 끌어 들이고 있습니다.
$.getJSON("http://127.0.0.1:8000/dbMap/map.json", function(json){
$.each(json.markers, function(i, language){
$('<p>').html('<img src="http://mysite/group' + language.group + '.png\" />' + language.value).appendTo('#legend-contents');
});
});
주어진 쌍에 대해 전체 JSON 객체에서 고유 한 이름/값 쌍을 어떻게 잡을 수 있습니까?
해결책
마커 배열을 키 값 쌍으로 변환 한 다음 속성을 반대하는 루프입니다.
var markers = [{"language":"Hungarian","group":"a", "value":"yes"},
{"language":"English", "group":"a", "value":"yes"},
{"language":"Ewe", "group":"b", "value":"no"},
{"language":"French", "group":"c", "value":"NA"}];
var uniqueGroups = {};
$.each(markers, function() {
uniqueGroups[this.group] = this.value;
});
그 다음에
$.each(uniqueGroups, function(g) {
$('<p>').html('<img src="http://mysite/group' + g + '.png\" />' + this).appendTo('#legend-contents');
});
또는
for(var g in uniqueGroups)
{
$('<p>').html('<img src="http://mysite/group' + g + '.png\" />' + uniqueGroups[g]).appendTo('#legend-contents');
}
이 코드 샘플은 루프의 마지막 값으로 고유 한 값을 덮어 씁니다. 첫 번째 값을 대신 사용하려면 키가 존재하는지 확인하기 위해 조건부 점검을 수행해야합니다.
다른 팁
더 일반적인 것은 어떻습니까?
function getDistinct(o, attr)
{
var answer = {};
$.each(o, function(index, record) {
answer[index[attr]] = answer[index[attr]] || [];
answer[index[attr]].push(record);
});
return answer; //return an object that has an entry for each unique value of attr in o as key, values will be an array of all the records that had this particular attr.
}
그러한 함수는 당신이 지정한 모든 고유 한 값을 반환 할뿐만 아니라 액세스 해야하는 경우에도 그룹화됩니다.
샘플에서 다음을 사용할 것입니다.
$.each(getDistinct(markers, "group"), function(groupName, recordArray)
{ var firstRecord = recordArray[0];
$('<p>').html('<img src="http://mysite/group' + groupName+ '.png\" />' + firstRecord.value).appendTo('#legend-contents');
}
이것 좀 봐-javaScript 객체 배열에서 고유 한 속성 값을 쿼리하는 가장 좋은 방법?
1이 아닌 2 값을 확인하는 변형이 필요합니다.
var markers = _.uniq( _.collect( markers , function( x ){
return JSON.stringify( x );
}));
제휴하지 않습니다 StackOverflow