-1

以下のようにjsonの再帰について多くのサイトを参照しています

JavaScript の再帰が正しく機能しない
オブジェクトに対する jQuery の再帰的反復

しかし、それらのほとんどは、キーを知っているか、知っているキーを使用して反復します。また、 $.each は、キーと値の両方が {"firstname" : "lastname"} などの文字列である場合にうまく機能し、関数 (k,v) はキーと値をそれぞれ k & v として与えることができます。

しかし、json オブジェクトが複雑で何が来ているか分からない場合、JSON1 と JSON2 ではキーが異なる可能性があります。

JSON1

{
    "one": true,
    "three": [
        "red",
        "yellow",
        [
            "blue",
            "azure",
            "cobalt",
            "teal"
        ],
        "orange"
    ],
    "two": 19.5
}

JSON2

{
    "five": true,
    "six": [
        "red",
        "yellow",
        [
            "blue",
            "azure",
            "cobalt",
            "teal"
        ],
        "orange"
    ],
    "ten": 19.5
}

キー名を特定して比較する方法があれば、問題ありません。キーを比較しやすいため、この tagName は以下の URL で提案されているように機能するはずです

jQuery はタグ名を提供できますか?

しかし、通常の json オブジェクトの属性 tagname では機能しないようです。text()、attr() などの firefox 属性を調べても、tagName が取得されません。私が望むのは、jsonオブジェクトをループして(実際にはxml2jsonプラグインを使用してxmlを上記のjson形式に変換しています)、存在する場合はキーを比較してアクションを実行することです。XML では、nodeName を使用して同じことができることを知っています。JSON オブジェクトを使用して同じことを行うにはどうすればよいですか。

4

2 に答える 2

0

簡単な解決策は、jQuery.parseJSON http://api.jquery.com/jQuery.parseJSON/を使用することです。

または、次のことができます。

var obj = JSON.parse(JSON1);

ただし、JSON オブジェクトはすべてのブラウザーでサポートされているわけではありません 。https ://github.com/douglascrockford/JSON-js/blob/master/json2.js を確認する必要がある場合があります。

そのライブラリを含めると、JSON オブジェクトがグローバルになるため (ブラウザーがサポートしていない場合)、コードを変更する必要はありません。

JSON 文字列を受け取り、解析し、obj に変換します。したがって、JSON1 の場合は次のようになります。

obj.one は値 = true を与えます

obj.two の値 = ["red","yellow",["blue","azure","cobalt","teal"],"orange"]

obj.three の値 = 19.5

次に、obj プロパティをトラバースできます。

for (var prop in obj) {
    if (obj.hasOwnProperty(prop)) {        
        switch(prop){
        {
            case "one":
                //Do stuff here
                break;
            case "two":
                //Do stuff here
                break;
            case "three":
                //Do stuff here
                break;
        }
    }
}

また、obj[prop] を使用すると、名前ではなく値が得られます。例、ループ中に遭遇した場合: prop = "three"

それから:

オブジェクト[小道具] = 19.5

于 2012-07-03T17:04:56.887 に答える
0

あなたが何を探しているのか完全にはわかりませんが、ここでこれを捨てます。

次のようなものを使用するとfor (key in jsonObj) { ... }、キー名を知らなくてもオブジェクトを反復処理できます。ループ内ではkey、現在のキー名とjsonObj[key]対応する値が表示されます。

たとえば、「JSON1」オブジェクトを使用する場合:

for(key in JSON1) 
{
   alert(key + ": " + JSON1[key]);
}

最初のアラートが表示されます: one: true.

ネストされたオブジェクトにアクセスするために、これを再帰的にすることもできると思います。

于 2012-07-03T16:55:06.530 に答える