2012-08-11 17 views
0

我一直在試圖弄清楚過去一週的情況,而我嘗試的所有事情似乎都不起作用。Node.js中的JSON數組

我必須在我的本地盒子上創建一個響應請求的Web服務。客戶(我沒有寫)會一次向我的服務詢問一個問題,我的服務器應該以適當的答案迴應。

所以最後的事情,我要做的是:

  • POST請求在位置製造 '/排序'與參數'theArray',數組排序刪除所有非字符串值並返回結果值爲JSON

    • theArray參數將是一個字符串化JSON陣列

從通過試錯去我已經發現,所提供的參數是:

{"theArray":"[[],\"d\",\"B\",{},\"b\",12,\"A\",\"c\"]"} 

我試過很多不同的東西來試圖讓這個工作。但是我能得到的最接近的東西是它只返回相同的東西或者什麼都沒有。這是我用得到這些結果的代碼:

case '/sort': 
     if (req.method == 'POST') { 
      res.writeHead(200,{ 
       'Content-Type': 'application/json', 
       'Access-Control-Allow-Origin': '*' 
      }); 
      var fullArr = ""; 
       req.on('data', function(chunk) { 
        fullArr += chunk; 
        }); 
       req.on('end', function() { 
          var query = qs.parse(fullArr); 
          var strin = qs.stringify(query.theArray) 
          var jArr = JSON.parse(fullArr); 
        console.log(jArr); // Returns undefided:1 
          var par = query.theArray; 
        console.log(par); // returns [[],"d","B",{},"b",12,"A","c"] 

           function censor(key) { 
            if (typeof key == "string") { 
              return key; 
             } 
             return undefined; 
             } 
         var jsonString = JSON.stringify(par, censor); 
        console.log(jsonString); // returns "" 
       });   
        res.end(); 


     }; 

break; 

只是爲了澄清什麼,我需要它返回的["d","B","b","A","c"]

所以,如果有人可以請幫我這一點,如果可能的迴應,一些書面的代碼,有點建立的方式,將已經與我的代碼設置,這將是偉大的方式工作!由於

+0

所以,你的對象被正確解析,你只需要把字符串元素?這更多是一個算法問題。我對麼? – davidbuzatto 2012-08-11 02:47:19

+0

我會說是有點兒。我只需要返回數組中的刺。所以[],{}和12需要取出,所以我可以返回字符串 – Chad 2012-08-11 02:50:52

+0

好的。看看我的答案。我會盡力去做你正在嘗試的方式。 – davidbuzatto 2012-08-11 02:54:05

回答

5

編輯:試試這個:

var query = {"theArray":"[[],\"d\",\"B\",{},\"b\",12,\"A\",\"c\"]"}; 
var par = JSON.parse(query.theArray); 
var stringArray = []; 
for (var i = 0; i < par.length; i++) { 
    if (typeof par[i] == "string") { 
     stringArray.push(par[i]); 
    } 
} 
var jsonString = JSON.stringify(stringArray); 
console.log(jsonString); 

附:我沒有注意。你的數組實際上是一個字符串。安德烈,謝謝你的提示。

+0

在他的例子中,它看起來是par json作爲字符串 – 2012-08-11 02:59:04

+0

Woo。不安靜它返回很多的東西:'[「[」,「[」,「]」,「,」,「\」「,」d「,」\「」.. – Chad 2012-08-11 02:59:06

+0

嘗試'console.log(typeof par))' – 2012-08-11 03:00:18

0

編輯:一襯墊(嘗試在REPL!)

JSON.stringify(JSON.parse(require('querystring').parse('theArray=%5B%5B%5D%2C"d"%2C"B"%2C%7B%7D%2C"b"%2C12%2C"A"%2C"c"%5D').theArray).filter(function(el) {return typeof(el) == 'string'})); 

代碼粘貼到您的服務器:

case '/sort': 
     if (req.method == 'POST') { 
      buff = ''; 
      req.on('data', function(chunk) { buff += chunk.toString() }); 
      res.on('end', function() { 
       var inputJsonAsString = qs.parse(fullArr).theArray; 
       // fullArr is x-www-form-urlencoded string and NOT a valid json (thus undefined returned from JSON.parse) 
       var inputJson = JSON.parse(inputJsonAsString); 
       var stringsArr = inputJson.filter(function(el) {return typeof(el) == 'string'}); 
       res.writeHead(200,{ 
       'Content-Type': 'application/json', 
       'Access-Control-Allow-Origin': '*' 
       }); 
       res.end(JSON.stringify(stringsArr)); 
     }; 
break; 
0

JSON.stringifyreplacer參數不起作用很喜歡你」重新使用它;退房the documentation on MDN

你可以使用Array.prototype.filter過濾掉你不想要的元素:

var arr = [[],"d","B",{},"b",12,"A","c"]; 
arr = arr.filter(function(v) { return typeof v == 'string'; }); 
arr // => ["d", "B", "b", "A", "c"]