2011-09-08 62 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.