2017-11-07 1 views
-1

JavaScript의 입력을 기반으로 기본 JSON 대량 데이터에서 json 항목을 빼고 싶습니다. 기본 JSON 데이터의 각 항목에는 고유 한 ID가 있지만 필터는 ID가 아닌 텍스트 식별자를 기반으로해야합니다. 예를 들어, 단어 burg (Burg, BURG, bUrg 등) 또는 기타 다른 다양한 항목을 검색하고 싶습니다. 이것은 물론 다른 검색 용어와도 작동해야합니다. 이 작업을 수행하는 데 필요한 JavaScript 기술이 없습니다.자바 스크립트에서 json의 하위 집합 추출

아래의 데이터에서 3 개의 결과가 반환되어야합니다. 분명히 결과는 똑같은 JSON 형식이어야합니다.

예 JSON은 :

{"type":"FeatureCollection","features":[{"id":1,"text":"Cape Town"},{"id":2,"text":"Kimberley"},{"id":3,"text":"Beaufort West"},{"id":4,"text":"Johannesburg Park"},{"id":5,"text":"Germiston"},{"id":6,"text":"Pietermaritzburg"},{"id":7,"text":"Durban"},{"id":8,"text":"Bellville"},{"id":9,"text":"Wellington"},{"id":10,"text":"Huguenot"},{"id":11,"text":"Worcester"},{"id":12,"text":"Matjiesfontein"},{"id":13,"text":"Laingsburg"},{"id":14,"text":"Prince Albert"},{"id":15,"text":"Hutchinson"},{"id":16,"text":"De Aar"},{"id":17,"text":"Warrenton"}]} 
+1

그것을 구문 분석 : 당신은 Array.prototype.filter() 방법을 사용할 수 있습니다. – zerkms

+0

그래, 많이 도움이되지 않을까 두렵다 ... 현재 코드는 이미 JSON 전체를 파싱했지만 파싱하기 전이나 파싱하기 전에 필터링하는 것이 더 쉬운 지 모르겠다. – Coryza

+0

"하지만 파싱하기 전에 또는 파싱하기 전에 필터링하는 것이 더 쉬운지 알지 못합니다. "- 그래서, 무엇이든 구현하고 사실을 기반으로 결정을 내릴 수 있습니까? 인터넷에서 너 자신이나 낯선 사람은 누구를 더 신뢰합니까? – zerkms

답변

2

이 자바 스크립트를 사용하지 마십시오. SQL과 그 대신 LIKE 연산자를 사용하십시오.

But if you insist on using JavaScript for this…

그냥 HTML 같은 정규 표현식은 완전히 때문에 직렬화의 JSON을 구문 분석 할 수 없습니다.

JSON.parse 이후의 필터링은 매우 쉽습니다. 제대로 당신은 JS 객체에서 필요한 선택

var s = '{"type":"FeatureCollection","features":[{"id":1,"text":"Cape Town"},{"id":2,"text":"Kimberley"},{"id":3,"text":"Beaufort West"},{"id":4,"text":"Johannesburg Park"},{"id":5,"text":"Germiston"},{"id":6,"text":"Pietermaritzburg"},{"id":7,"text":"Durban"},{"id":8,"text":"Bellville"},{"id":9,"text":"Wellington"},{"id":10,"text":"Huguenot"},{"id":11,"text":"Worcester"},{"id":12,"text":"Matjiesfontein"},{"id":13,"text":"Laingsburg"},{"id":14,"text":"Prince Albert"},{"id":15,"text":"Hutchinson"},{"id":16,"text":"De Aar"},{"id":17,"text":"Warrenton"}]}'; 
 
var input = "burg"; 
 
var o = JSON.parse(s); 
 
o.features = o.features.filter(e => RegExp(input, 'i').test(e.text)); 
 
console.log(JSON.stringify(o));

+0

감사합니다. 그 트릭을 할 것으로 보인다. 짧은 추가 Q : 어떻게 고정 된 문자열 'burg'을 텍스트 변수로 대체 할 수 있습니까? 나는 Javascript RegEx의 문서에서 대답을 찾으려고했지만 분명히 성공적이지는 않았다. – Coryza

+0

@Coryza 당신이 대답을 좋아한다면, 적절한 감사는 upvote 및/또는 받아들입니다. (나는 속행에 대답하기 위해 작은 조각을 바꿀 것이다.) –

+0

너는 절대적으로 옳다. 나는 그것에 대해 잊어 버리는 나의 흥분 때문에. 다시 한번 감사드립니다. – Coryza

관련 문제