0

リモート サービスとの javascript (nodejs) 統合を構築しています。このサービスは一貫性のない形式の結果を返します。JavaScript 内から、応答に基づいて形式を切り替える方法を決定するのに苦労しています。

以下に 2 つの形式を示します。1 つ目は親が 1 つの子を持つ場合で、2 つ目は親が 1 つ以上の子を持つ場合です。

var single = { "Parent" : { "name" : "foo" } }
var multi = { "Parent" : [ { "name" : "foo" }, { "name" : "bar" } ] }

そのため、「name」の子属性にアクセスして js で結果を解析しようとすると、一貫性のない結果が得られます。

for (var i in single) {
    console.log("child name: " + single[i].name;
}

for (var i in multi.Parent) {
    console.log("child name: " + multi.Parent[i].name;
}

返される結果が 1 つなのか複数なのかを判断する最善の方法は何ですか? マルチの「配列」を取得することを期待して、「typeof response」を試しましたが、うまくいきませんでした。オブジェクトは最初は文字列として受信されますが、JSON.parse(responseString).

4

5 に答える 5

3

おそらくconstructorプロパティを使用できます。

>> single.Parent.constructor == Array
false
>> multi.Parent.constructor == Array
true
于 2012-10-18T08:54:05.683 に答える
1

「name」プロパティが定義されているかどうかをテストできます。

var single = { "Parent" : { "name" : "foo" } };
var multi = { "Parent" : [ { "name" : "foo" }, { "name" : "bar" } ] };

console.log(single.Parent.name == undefined); // True
console.log(multi.Parent.name == undefined);  // False

参照: http://jsfiddle.net/QhFvP/

于 2012-10-18T08:52:36.730 に答える
0

typeof response配列はオブジェクトであるため、両方がオブジェクトであることがわかります。

multi.Parent.length を取得しようとすると、配列の場合は数値が得られ、JSON オブジェクトの場合は未定義になります。そう、

for (var i = 0; i < multi.Parent.length; i++){
    console.log("child name", multi.Parent[i].name)
}
于 2012-10-18T08:55:23.360 に答える
0

あなたがここでやっているエラーが表示されます。そもそもどちらの応答もオブジェクトです。Parent結果の数に応じてオブジェクトまたはリストになるフィールドです。あなたはすべきではありません:

single[i].name

次のように書く必要があります。

single.Parent[i].name

したがって、単一または複数の回答があるかどうかを確認するには、確認する必要があります

if(response.Parent instanceof Array){}

instanceofの代わりに を使用することに注意してくださいtypeof。ところで、JSON を使用してテキストからオブジェクトを構築することに問題はありません。

于 2012-10-18T08:56:58.663 に答える
0

最終的なコード:

// Using instanceof
if (response.Parent instanceof Array !== true) response.Parent = [response.Parent]
// More robust method, using .constructor:
if (response.Parent.constructor !== Array) response.Parent = [response.Parent]

// Continue with multi processing 
for (var i in response.Parent) {}

すべてのフィードバックに感謝します。

于 2012-10-19T11:36:46.220 に答える