我从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");
});
会返回索引号,这对我没用
答案 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)
很少有观察结果:
var obj
是array of objects
。因此,Object.keys(obj)
将生成数组元素的索引数组。Array.map()
方法迭代数组,然后我们可以将每个对象的值映射到变量中。<强>样本强>
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;
答案 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' }