我试图只使用javascript编写一个JSON解析器。我只想使用javascript的原因是,我希望解析Meteor中服务器端的API返回的结果。然而,我在解析它时遇到了困难。下面是返回的JSON:
{
"R_5N4205x1hhF6pGZ":{
"ResponseSet":"Default Response Set",
"Name":"Anonymous",
"ExternalDataReference":"",
"EmailAddress":"",
"Status":"16",
"StartDate":"2014-01-09 11:19:51",
"EndDate":"2014-01-09 11:19:56",
"Finished":"1",
"Q1":"Hello "
},
"R_7mqYPn4rZfNtVif":{
"ResponseSet":"Default Response Set",
"Name":"Anonymous",
"ExternalDataReference":"",
"EmailAddress":"",
"Status":"16",
"StartDate":"2014-01-09 11:21:58",
"EndDate":"2014-01-09 11:22:05",
"Finished":"1",
"Q1":"Name identifier"
},
"R_bHs2h06HSQ1h2Qh":{
"ResponseSet":"Default Response Set",
"Name":"Anonymous",
"ExternalDataReference":"",
"EmailAddress":"",
"Status":"16",
"StartDate":"2014-01-09 11:28:24",
"EndDate":"2014-01-09 11:28:30",
"Finished":"1",
"Q1":"Test"
},
"R_20rlmxxgGkYnWWF":{
"ResponseSet":"Default Response Set",
"Name":"Some, Name",
"ExternalDataReference":"",
"EmailAddress":"",
"Status":"0",
"StartDate":"2014-01-09 12:21:15",
"EndDate":"2014-01-09 12:21:27",
"Finished":"1",
"Q1":"hjjhhjhj"
},
"R_e36yuRbnMmh38dD":{
"ResponseSet":"Default Response Set",
"Name":"Anonymous",
"ExternalDataReference":"",
"EmailAddress":"",
"IPAddress":"161.185.153.4",
"Status":"0",
"StartDate":"2014-01-09 12:23:04",
"EndDate":"2014-01-09 12:23:11",
"Finished":"1",
"Q1":"hello world "
}
}我想用一个对象父键保存每个响应对象,作为“responseID”键:值(即array["responseID"]="R_e36yuRbnMmh38dD)。
"R_e36yuRbnMmh38dD":{
"ResponseSet":"Default Response Set",
"Name":"Anonymous",
"ExternalDataReference":"",
"EmailAddress":"",
"IPAddress":"161.185.153.4",
"Status":"0",
"StartDate":"2014-01-09 12:23:04",
"EndDate":"2014-01-09 12:23:11",
"Finished":"1",
"Q1":"hello world "
}我想将结果集保存在mongoDb中。
发布于 2014-01-09 23:11:48
您可以使用NodeJS JSON.parse()函数,但是如果我理解,您希望更多地使用对象中的键创建一个对象。
这是代码,如果您想要这样做的话:
var originalObject;
var resultArray;
for (var key in originalObject) {
if(originalObject.hasOwnProperty(key )){
var obj = originalObject[key];
obj.responseID = key;
resultArray.push(obj);
}
}但你的问题有点让人困惑。对于mongoDB,我建议使用nodejs本地驱动程序
发布于 2014-01-09 23:23:47
我认为您不是在讨论JSON解析器--您似乎想要转换一些已经解析过的对象,特别是向每个对象添加一个新属性。尽管您的示例没有显示这一点,而且也没有array,所以这是纯粹的猜测。
var responses_map = JSON.parse('{"R_5N4205x1hhF6pGZ": { "ResponseSet": ...');可以使用Object.keys获取对象成员的字符串。
Object.keys(responses_map).forEach(function(response_id) {
responses_map[response_id].responseID = response_id;
});
// now responses_map.R_5N4205x1hhF6pGZ.responseID is "R_5N4205x1hhF6pGZ"(注意:假设是现代的JavaScript --如果您的代码也需要在IE8上运行,则需要使用for response_id in response_map循环而不是Object.keys。)
https://stackoverflow.com/questions/21032923
复制相似问题