如何在Node JS中将类型字符串的输入转换为类型对象数组

时间:2018-11-14 09:37:28

标签: javascript node.js vorpal.js

我正在创建一个cli应用,我从用户那里得到了输入:print [{name:'joe', age:19}]其中arg = [{name:'joe', age:19}]

但是当我执行typeof arg时,它将返回string。我尝试使用json.parse [抛出错误],slice(1,-1) [删除外部数组括号和类型保留字符串]和Array.from(arg) [将所有括号和字母分成不同的元素]。

那么如何将[{name:'joe', age:19}]转换为类型对象数组?

代码段:

vorpal
.command('input <array>')
.action(function(args,cb) {
  let array = args.array;
  this.log(array); //returns [{name:'joe',age:19}]
  this.log(typeof array);  //returns string
  cb();

});

5 个答案:

答案 0 :(得分:0)

您传递的输入不是有效的JSON结构,这就是JSON.parse显示解析错误的原因。

var validInput = '[{"name":"joe","age":19}]';
console.log(JSON.parse(validInput)); 

答案 1 :(得分:0)

运行代码段。

var obj = new Object({name:'joe', age:19});
console.log(typeof obj);

答案 2 :(得分:0)

JSON.parse期望键用双引号引起来。所以必须以某种方式将输入更改为此格式

OnCollisionEnter

,输出将是

enter image description here

答案 3 :(得分:0)

您仍然可以尝试使用这些正则表达式,将您的字符串转换为有效的JSON。请注意,它不是完美的,此版本仅接受字母和数字作为对象的键,而其他字符对于对象键也可以有效。如果您了解一些正则表达式,则必须修改此部分[a-zA-Z0-9]以对其进行改进。

var str = "[{name:'joe', age:19}, {'name':'jack', age:21}, {\"name\":\"jane\", age:23}]", validJson, obj;
console.log('original string: ', str);

validJson = str.replace(/({\s*|,\s*)'?([a-zA-Z0-9]+)'?(\s*:)/g, '$1"$2"$3').replace(/(:\s*)'(.*?)'(\s*,|\s*})/g, '$1"$2"$3');
console.log('modified string: ', validJson);

obj = JSON.parse(validJson);
console.log('decoded from JSON: ', obj);

编辑:正则表达式更新为支持用简单引号定义的对象键(第二个对象)。注意:它会保留格式正确的JSON(第3个对象)。

答案 4 :(得分:0)

一种解决方案是使用eval,例如

> eval("[{name:'joe', age:19}]")
[ { name: 'joe', age: 19 } ]