javascript
  • jquery
  • json
  • 2017-12-04 26 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

    ああ。じぶんの。神。あなたの答えはとてもシンプルです。ありがとうございました! –

    関連する問題