2014-01-09 63 views
0

我想写一个JSON解析器只使用JavaScript。我只想使用javascript的原因是我想解析从Meteor流服务器端API返回的结果。但是,我解析它时遇到问题。下面是JSON退换:JavaScript的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中设置。

+0

所以你使用Node.js,它有一个内置的JSON解析器? – Pointy

+0

什么是错误? –

+0

我是新来的流星和node.js,任何意见或建议将不胜感激。到目前为止,我一直只在线寻找json javascript解析器。 – ivan

回答

1

可以使用的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 native driver

+0

如何通过每次迭代访问responseID? – ivan

+0

明白了!谢谢! (结果数组中的变量x) { console.log(resultArray [x] .Name); } – ivan

1

我不认为你是在谈论一个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)。

+0

我想循环通过存储在每个对象中的所有值: (var key in response_map) var obj = response_map [key]; console.log(obj.responseId); } 但它返回undefined。我如何访问responseId值? – ivan

+0

'obj.responseId'将会是未定义的,因为它不会出现在对象中,除非您编写它。你会想要做'obj.responseId = key'。注意,如果你使用'for ... in'循环,你应该使用'hasOwnProperty'作为Yoann的答案,以避免来自'Object'的不需要的继承问题。 – bobince