2011-09-08 61 views
0

我有一個.json響應,需要重新格式化爲不同的響應,我最終將重新解析並保存在別處的其他代碼中。完全重新格式化json響應

我不完全確定如何描述我在這裏做什麼,但是當我知道我的數組以適當的格式分組後,我可以解析json。 : - \

請允許我向您展示的代碼,什麼輸出應該是這樣的:

當前JSON格式:

 

    {"response": 
     {"docs":[ 
     {"set_number":"1","set_description":"first description","subset_number":"835","subset_description 1":"hello 2" }, 
     {"set_number":"1","set_description":"first description","subset_number":"845","subset_description 2":"hello 3" }, 
     {"set_number":"2","set_description":"first description","subset_number":"855","subset_description 3":"hello 4" }, 
     {"set_number":"2","set_description":"first description","subset_number":"865","subset_description 4":"hello 5" }, 
     {"set_number":"3","set_description":"first description","subset_number":"875","subset_description 5":"hello 6" }, 
     {"set_number":"4","set_description":"first description","subset_number":"885","subset_description 6":"hello 7" }, 
     {"set_number":"4","set_description":"first description","subset_number":"895","subset_description 7":"hello 8" }, 
     ] 
     } 
     } 

..這裏就是我試圖使它看起來像:

 

     {"response": 
      {"docs":[ 

    { 
    "set_number":"1","set_description":"first description", 
    "subsets":[ 
     {"subset_number":"845","subset_description 2":"hello 3"}, 
     {"subset_number":"835","subset_description 1":"hello 2"} 
     ] 
    }, 
    { 
    "set_number":"2","set_description":"first description", 
    "subsets":[ 
     {"subset_number":"855","subset_description 3":"hello 4"}, 
     {"subset_number":"865","subset_description 4":"hello 5"} 
    }, 
    { 
    "set_number":"3","set_description":"first description", 
    "subsets":[ 
     {"subset_number":"875","subset_description 5":"hello 6"} 
     ] 
    }, 

    { 
    "set_number":"4","set_description":"first description", 
    "subsets":[ 
     {"subset_number":"895","subset_description 7":"hello 8"}, 
     {"subset_number":"885","subset_description 6":"hello 7"} 
     [ 
    }, 
      ] 
     } 
     } 

正如你所看到的,我基本上都結合的子集的信息,這樣的反應是更清潔,組合在一起。

任何援助將不勝感激!

+0

你想這樣做在JavaScript還是什麼? – Tadeck

回答

0

以下應該做你想要什麼:

function reformat(input) { 
    // We'll update this as we progress through the input array 
    var output = { 
     docs: [] 
    } 

    // We use this as a handy, reusable way to either find an existing 
    // setNumber, or create a placeholder for it and return the new one 
    // if none existed 
    function find(setNumber, setDescription) { 
     var docs = output.docs; 

     // Try and find an existing entry which has the same set number 
     // as we're looking for 
     for (var i=0;i<docs.length;i++) { 
      if (docs[i]["set_number"] == setNumber) { 
       return docs[i]; 
      }; 
     }; 

     // If we get this far, none exist; so create and add to the array here 
     var newOne = { 
      'set_number': setNumber, 
      'set_description' : setDescription, 
      subsets: [] 
     }; 

     docs.push(newOne); 

     return newOne; 
    }; 

    // Heres the actual work; loop through the input array, use `find` to 
    // find or create the entry in the output array, and add the current 
    // subset to its list 
    for (var i=0;i<input.docs.length;i++) { 
     var doc = input.docs[i]; 
     var current = find(doc["set_number"], doc["set_description"]); 

     current.subsets.push({ 
      'subset_number': docs["subset_number"], 
      'subset_description': docs["subset_description"] 
     }); 
    } 

    return output; 
} 

這樣稱呼它:

var output = reformat(input); // where input should point to a variable storing the "response" property of the JSON you included.