2017-07-18 48 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

這是返回一個對象,這是一個字符串類型(我很奇怪)。我會讓開發人員知道這是一個錯誤,或者可能是由於我的設置(節點,表達,反應)。

感謝您的答案。