如何从json数据中仅获取特定键值对,并将其存储在节点js中的变量中

时间:2016-09-22 16:10:00

标签: javascript json node.js

我有一个示例json数据,我需要将其添加到mongodb中的不同集合中。但是我不想要整个json数据。例如,

jsondata=
  {"widget": {
"debug": "on",
"window": {
    "title": "Sample Konfabulator Widget",
    "name": "main_window",
    "width": 500,
    "height": 500
},
"image": { 
    "src": "Images/Sun.png",
    "name": "sun1",
    "hOffset": 250,

},
"text": {
    "data": "Click Here",
    "size": 36,
    "style": "bold",

}}

在这个json中我想要一个集合中的窗口键,另一个mongo集合中的simillarly图像键。 所以我在考虑是否可以在一个变量中保存该键值对,然后我可以将该变量添加到集合中。为此我尝试了每个

var jsondat=JSON.parse(jsondata);
for(var exKey in jsondat) {
 console.log("entering");
 var b=stringdata[exKey].image;

 console.log(b);
}       

但我无法获得该图像关键数据。这是正确的方法吗?有人可以帮助我解决这个问题。  我的预期结果是: 在一个变量中,窗口键的值应以json格式保存。 Simillarly图像和文本键值在另一个变量中。

感谢。

3 个答案:

答案 0 :(得分:0)

为什么不直接从对象中获取窗口和图像,如:

var window= jsondata.widget.window;
var image = jsondata.widget.image;

并将它们保存在mongo db

db.window.insert(window)
db.image.insert(image)

告诉我如果我理解正确的话。

答案 1 :(得分:0)

我没有发现太多问题。

var jsondat=JSON.parse(jsondata);
for(var exKey in jsondat.widget) {
 console.log("entering");
 console.log(exKey);
 if(exKey === 'image'){
  db.image.insert(jsondat.widget[exKey]);
 }else if(exKey === 'window'){
  db.window.insert(jsondat.widget[exKey]);
 }
 // or db.getCollection(exKey).insert(jsondat.widget[exKey]);
}

但是我还要补充说,在MongoDB中不需要规范化,你应该使用更多嵌入,因为如果你想整理数据,你以后就不能加入集合。但这是一个普遍的想法,也许在你的要求中你想要不同的收藏。

答案 2 :(得分:0)

你可以通过多种方式实现。

方法#1

var arr = [];
for(var i in jsondata.widget){
  if(typeof(jsondata.widget[i])==='object'){
   arr.push(jsondata.widget[i]);
  }
};
console.log(arr);

方法#2

您可以使用unserscore实用程序库轻松进入

var _=require('underscore');
var arr = [];
_.each(jsondata.widget,function(o){
  if(typeof(o)==='object'){
   arr.push(o);
  }
});

console.log(arr);

现在您可以按索引访问所有对象

<强>输出

[ { title: 'Sample Konfabulator Widget',
    name: 'main_window',
    width: 500,
    height: 500 },
  { src: 'Images/Sun.png', name: 'sun1', hOffset: 250 },
  { data: 'Click Here', size: 36, style: 'bold' } ]

方法#3

尝试获取每个内部键的单独值

var window= jsondata.widget.window;
var image= jsondata.widget.image;
var text= jsondata.widget.text;

修改

var obj={
  "json": {
    "window": {
      "title": "sample",
      "name": "sam"
    },
    "image": {
      "src": "Images/Sun.png",
      "name": "sun1",
      "hOffset": 250
    }
  }
}

console.log(obj.json.window)

result-> {title: "sample", name: "sam"}