在nodejs中使用格式键值解析数组

时间:2018-05-28 09:35:39

标签: javascript json node.js

我从ajax调用接收到以下格式的nodeJS应用程序的JSON;我收到一个数组,我发送它

#python 3
olist = list(filter(lambda s: s.isalpha() , list1))
<br>print(olist) # ['Stack', 'over', 'flow']

#python2
olist = filter(lambda s:s.isalpha(), list1) 
<br>print olist # ['Stack', 'over', 'flow']

我收到如下:

$.ajax({
                    type:'POST',
                    url:'/check',
                            data:JSON.stringify(array1),
                            contentType: "application/json; charset=utf-8",
                            dataType: "json"})  
    })

我想将这些值保存在变量中,如下所示:

[{ key: 'name',  value: 'lorem ipsum' }
{ key: 'language', value: 'en' }
{ key: 'color', value: 'red' } 
{ key: 'resolution', value: [ 1920, 1080 ] } ]

我不知道如何遍历JSON的键并将代码中的键的值关联起来

目前app.post('/check', function(req, res) { var obj = req.body; var keys = Object.keys(obj); for (var i = 0; i < keys.length; i++) { console.log(keys[i]) // what i want to do: // if (keys[i] == 'name') { // var name = value of this key, // in this example // var name = "lorem ipsum" // var language = "en" // var color = "red" // var resolution = [ 1920, 1080 ] } res.send("ok"); }); 会返回索引号,这对我没用

6 个答案:

答案 0 :(得分:1)

使用正则表达式尝试使用此代码段来解析输入:

var myString = `{ key: 'name',  value: 'lorem ipsum' }
{ key: 'language', value: 'en' }
{ key: 'color', value: 'red' } 
{ key: 'resolution', value: [ 1920, 1080 ] }`;
var myRegexp = /(?:key: ')([a-z]*)(?:')/g;
match = myRegexp.exec(myString);
while (match) {
  console.log(match[1])
  match = myRegexp.exec(myString);
}

答案 1 :(得分:1)

很少有观察结果:

  • 根据OP,var objarray of objects。因此,Object.keys(obj)将生成数组元素的索引数组。
  • 我们可以尝试使用Array.map()方法迭代数组,然后我们可以将每个对象的值映射到变量中。

<强>样本

&#13;
&#13;
var obj = [{ key: 'name',  value: 'lorem ipsum' },
{ key: 'language', value: 'en' },
{ key: 'color', value: 'red' },
{ key: 'resolution', value: [ 1920, 1080 ] }];

obj.map(item => {
  if (item.key == 'name') {
    var name = item.value;
    console.log(name); // lorem ipsum
  }
});
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我认为您的JSON格式不正确,您可能希望它看起来那样:

{
    "name": "lorem ipsum",
    "language": "en",
    "color": "red",
    "resolution": "[ 1920, 1080 ]"
}

就像那样,您可以访问以下数据:

var obj = req.body;
var name = obj.name;
var language = obj.language;
var color = obj.color;
var resolution = obj.resolution;

答案 3 :(得分:0)

首先,不要将任何变量命名为“keys”:)

其次,您应该真正使用后端实现来返回有效的JSON代码,而不是返回行到对象。

答案 4 :(得分:0)

您收到的格式

{ key: 'name',  value: 'lorem ipsum' }
{ key: 'language', value: 'en' }
{ key: 'color', value: 'red' } 
{ key: 'resolution', value: [ 1920, 1080 ] }

是一个键值对象数组。所谓的Object.keys就一定会返回一个索引号数组。

你想要做的只是循环遍历数组,检查每个对象的键值并相应地对值进行操作,下面是ES6上的示例,NodeJS 6及更高版本支持:

var obj = req.body;

obj.map(({key, value}) => { 
  if (key === 'name') {
  // Do something on value
  } 
})

答案 5 :(得分:0)

如果您确实使用了JSON,那么简单的JSON.parse()会将您的JSON字符串转换为您描述的形状的对象。

如果要遍历所有ojbect属性,有3种方便的方法:

  • Object.keys将返回所有对象键的数组

  • Object.values将返回所有对象值的数组

  • Object.entries将返回一个数组数组,其中包含键作为第一个元素,值为第二个。

示例代码:

const obj = { key: 'name',  value: 'lorem ipsum' };

Object.entries(obj).map(([key, value]) => {
    console.log(key);
    console.log(value);
});
// will log 'key', 'name', 'value', 'lorem ipsum'

如果你有一个对象数组:

const arr_of_obj = [
                       { key: 'name',  value: 'lorem ipsum' },
                       { key: 'name2',  value: 'lorem ipsum' }
                   ];

arr_of_obj.map(item => {
    Object.entries(item).map(([key, value]) => {
        console.log(key);
        console.log(value);
    })
});

修改

如果我说得对,那么你真正想要的是创建一个新对象,输入key属性作为键,value属性作为值:

const arr_of_obj = [
                       { key: 'firstName',  value: 'john' },
                       { key: 'lastName',  value: 'doe' }
                   ];

const newObj = arr_of_obj.reduce((memo, {key, value}) => {
    return {
        ...memo,
        [key]: value
    }
}, {});

console.log(newObj);
//will output { firstName: 'john', lastName: 'doe' }