我正在创建一个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();
});
答案 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)
答案 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 } ]