2016-10-01 105 views
1

Stuck之間我的應用程序調用模塊解析嵌套的JSON對象,以讀取2鍵的值。JST嵌套對象和回調在Nodejs

parseData(str, function (error, str) { 
    if (err) { 
     console.log("Error - parseData : ", err); 
    } else { 
     console.log(str); 
    } 

而且parseData模塊如下

function parseData(str, callback) { 

    function recursiveFunction(obj) { 
    var keysArray = Object.keys(obj); 

    for (var i = 0; i < keysArray.length; i++) { 
     var key = keysArray[i]; 
     var value = obj[key]; 

     if (value === Object(value)) { 
     parseData(value); 
     } else { 
     if (key == 'title') { 
      title = value; 
     } 

     if (key == 'extract') { 
      var extract = value.replace(/(\r\n|\n|\r)/gm," "); 
      callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 
     } 
     } 
    } 
    } 

    recursiveFunction(str); 

} 

但它顯示了以下錯誤

/modules/parseData.js:22 
       callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 
      ^

TypeError: callback is not a function 

爲什麼回調失敗?如何返回JSON對象?

編輯

有代碼中的一些錯誤,現在修正。

function parseData(str, callback) { 
     function recursiveFunction(obj) { 
      var keysArray = Object.keys(obj); 

      for (var i = 0; i < keysArray.length; i++) { 
       var key = keysArray[i]; 
       var value = obj[key]; 

       if (value === Object(value)) { 
        recursiveFunction(value); 
       } else { 
        if (key == 'title') { 
         title = value; 
        } 

        if (key == 'extract') { 
         var extract = value.replace(/(\r\n|\n|\r)/gm," "); 
         callback(null, JSON.stringify('{"title":'+ title + ', "text":' + extract)); 
        } 
       } 
      } 
     } 
     recursiveFunction(str); 
    }; 
+0

您的第一個代碼塊缺少'}'和')';是一個錯誤的帖子或你的程序是否有語法錯誤? – Jacob

+0

當您遞歸調用函數時,將'callback'加入參數 –

+0

'callback(null,JSON.stringify('{「title」:'+ title +',「text」:'+ extract));'看起來非常錯誤。如果你想創建適當的JSON,你應該傳遞一個對象到'JSON.stringify':'callback(null,JSON.stringify({title:title,text:extract}));'。但是你確定你想要JSON而不是一個對象嗎? –

回答

0

你打電話給parseData(value);而不是傳遞迴調;如果您想要使用原始回調,請傳遞callback

+0

我不明白。我將回調函數傳遞給parseData(str,function(error,str))。 –

+1

您在'parseData'內遞歸調用'parseData',並且該內部調用不傳遞迴調。 – Jacob

+0

對不起,我的代碼有錯誤,我在主要問題部分發布了修改後的代碼。這裏我在parseData中遞歸調用recursiveFunction。所以,我需要修改我的recursiveFunction調用,以便在調用parseData模塊時傳遞原始回調。 recursiveFunction(str,callback); 對嗎? –