0

私はこの 1 週間、これを理解しようとしてきましたが、私が試したことはすべてうまくいかないようです。

リクエストに応答する Web サービスをローカル ボックスに作成する必要があります。クライアント (私が書いたものではありません) は、私のサービスに一度に 1 つの質問をします。これに対して、サーバーは適切な回答を返す必要があります。

だから私がしなければならない最後のことは:

  • パラメータ'theArray'を使用して場所'/sort'POSTリクエストが行われると、配列をソートして文字列以外の値をすべて削除し、結果の値を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"]

したがって、誰かがこれについて私を助けてくれ、可能であれば、私がコードをセットアップした方法ですでに動作するような方法でセットアップされた、書かれたコードで応答してくれれば、それは素晴らしいことです! ありがとう

4

3 に答える 3

7

編集:これを試してください:

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);

PS私は注意を払っていませんでした。あなたの配列は実際には文字列でした。アンドレイ、ヒントをありがとう。

于 2012-08-11T02:50:52.567 に答える
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;
于 2012-08-11T02:58:02.683 に答える
0

replacerパラメーターは、JSON.stringify使用しているようには機能しません。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"]
于 2012-08-11T03:00:00.737 に答える