2017-07-18 46 views
-1

我在节点中使用express-validator来验证我的表单,一旦我返回了我的验证结果充满错误,他们通过一个对象(这是我有):嵌套的对象是一个字符串 - 需要它们作为对象

{ email: 
    { param: 'email', 
    msg: 'Email address must be between 4-100 characters long, please try again.', 
    value: '' }, 
    name: 
    { param: 'name', 
    msg: 'Name must be between 3-20 characters long.', 
    value: '' }, 
    password: 
    { param: 'password', 
    msg: 'Password must include one lowercase character, one uppercase character, a number, and a special character.', 
    value: '' }, 
    passwordc: 
    { param: 'passwordc', 
    msg: 'Password must be between 8-50 characters long.', 
    value: '' } } 

我的问题是,这是一个“字符串”,不幸的不是对象类型。我需要把它转换成它应该是的,一个嵌套对象的对象。

我无法使用JSON.parse,因为这不是有效的JSON。

我该如何将这个对象串变成一个对象?这样我可以循环显示相关的错误。

感谢您的帮助。 P.S我是超级卡住这个 - 所以如果你知道这个答案,那么很多布朗尼都指向我,指向你。干杯!

+0

你的JSON是有效的,为什么你不能在这种情况下使用'JSON.parse'? –

+1

你可以用JSONLint检查出来,这是无效的。有效的JSON应该有双引号,而不是单个引号,并且所有的键也应该在它们周围加双引号。我可以使用JSON.parse的唯一方法是在运行太多正则表达式之后,这不是一个好方法,因为键名可能会改变。我真的很难过这个! – Notorious

+1

我很困惑,这是一个有效的JavaScript对象,而不是一个字符串。 – str

回答

0

我认为这是JSON表示法的问题。您正在获取的当前字符串不是所需的格式。你需要在属性名称和双引号中加双引号而不是单引号。这应该让你的JSON.parse工作。

为了解决这个问题,您必须关注从哪里获取此JSON并确保它发出正确的JSON格式。另外,如果您的代码正在创建此JSON,您宁愿不想添加换行符和填充以减小大小。您始终可以使用http://www.jsoneditoronline.org/(或其他)以友好的格式查看它们。

希望这会有所帮助!

1

好吧,这真的很奇怪,我已经到了这个底部。

基本上,express-validator使用新更新传递对象的方式肯定存在bug /问题。

我已经使用它们的折旧函数validationErrors(),它返回一个对象是一个对象 - 耶。而不是使用他们的推荐设置:https://github.com/ctavan/express-validator#installation

这是返回一个对象,这是一个字符串类型(我很奇怪)。我会让开发人员知道这是一个错误,或者可能是由于我的设置(节点,表达,反应)。

感谢您的答案。