javascript
  • jquery
  • json
  • 2017-12-04 3 views 1 likes 
    1

    키 분리에 밑줄로 구성된 JSON 객체로 파싱해야하는 테스트 입력이 제공되었습니다.복잡한 문자열 배열에서 JSON 객체 만들기

    var testInput1 = '{"Data_Structure_Test1": "Test1 Data"}'; 
    var testInput2 = '{"Data_Structure_Test2": "Test2 Data"}'; 
    var testInput3 = '{"Data_Structure_Test3": "Test3 Data"}'; 
    var testInput4 = '{"Data_AnotherStructure": "AnotherStructure Data"}'; 
    var testInput5 = '{"Data_JustAnother": "JustAnother Data"}'; 
    var testInput6 = '{"NewData_NewTest": "NewTest Data"}'; 
    

    따라서 위 testInputs은 뱉어해야

    { 
        "Data": { 
         "Structure": { 
          "Test1": "Test1 Data", 
          "Test2": "Test2 Data", 
          "Test3": "Test3 Data" 
         }, 
         "AnotherStructure": "AnotherStructure Data", 
         "JustAnother": "JustAnother Data" 
        }, 
        "NewData": { 
         "NewTest": "NewTest Data" 
        } 
    } 
    

    내가 JSON 객체가 올바른 용기에 수집 얻을 수없는 것.

    var data = {}; 
    
    parse_input(testInput1); 
    parse_input(testInput2); 
    parse_input(testInput3); 
    parse_input(testInput4); 
    parse_input(testInput5); 
    parse_input(testInput6); 
    
    var result = JSON.stringify(data, undefined, '\t'); 
    

    사람이 내가 무엇을 볼 수 있습니다 여기에

    Here is a JSFiddle that I have been using to test with

    내가 문자열을

    function parse_input(aInput) { 
    
    let jObj = JSON.parse(aInput); 
    
        for (let key in jObj) { 
    
        let objKeys = key.split("_"); 
    
        for (i = 0; i < objKeys.length; i++) { 
    
         if (data.hasOwnProperty(objKeys[i])) { 
    
         data[key] = jObj[key]; 
         } else { 
    
         data[objKeys[i]] = jObj[key]; 
         } 
        } 
    

    을 구문 분석 호출하고 내가 입력을 전달하고 어떻게 내 기능입니다 잘못하고있는거야?

    프레임 워크를 사용하면 jQuery 프레임 워크에 액세스 할 수 있습니다.

    +0

    구조에 깊이 들어가기위한 코드가 표시되지 않습니다. –

    답변

    2
    function parse_input(json){ 
        const obj = JSON.parse(json); 
        for(const key in obj){ 
         const keys = key.split("_"); 
         keys.slice(0,-1).reduce(function(obj, key){ 
          return obj[key] || (obj[key] = {}); 
         }, data)[keys.pop()] = obj[key]; 
        } 
    } 
    

    당신은 데이터 객체로 깊이 갈을 줄이기 사용할 수 있습니다.

    +0

    [시도해보기] (http://jsbin.com/xexucavani/edit?console) –

    +0

    오. 나의. 하나님. 당신의 대답은 아주 간단합니다. 고맙습니다! –

    관련 문제