16

私はjsonを勉強していますが、これがネストされた多次元jsonオブジェクトを書く正しい方法であるかどうか疑問に思っていました.私は書きました:

var foo = {
    "logged_in":true,
    "town":"Dublin",
    "state":"Ohio",
    "country":"USA",
    "products":2,
    "0":{
        "pic_id":"1500",
        "description":"Picture of a computer",
        "localion":"img.cloudimages.us/2012/06/02/computer.jpg",
        "type":"jpg",
        "childrenimages":2

        "0":{
        "pic_id":"15011",
        "description":"Picture of a cpu",
        "localion":"img.cloudimages.us/2012/06/02/mycpu.png",
        "type":"png"
          }
        "1":{
        "pic_id":"15012",
        "description":"Picture of a cpu two",
        "localion":"img.cloudimages.us/2012/06/02/thiscpu.png",
        "type":"png"
          }
    },
    "1":{
        "pic_id":"1501",
        "description":"Picture of a cpu",
        "localion":"img.cloudimages.us/2012/06/02/cpu.png",
        "type":"png"
    }
};

これは正しいですか、それとも、オブジェクトのネストが深くなりすぎた場合に従うべき規則はありますか?

4

4 に答える 4

23

番号付きオブジェクトの代わりに配列を使用することを検討してください。

jsonの配列は、[] http://www.json.org/を使用して定義されます。

次に例を示します。

var foo = {
    "logged_in":true,
    "town":"Dublin",
    "state":"Ohio",
    "country":"USA",
    "products":
    [
        {
            "pic_id":"1500",
            "description":"Picture of a computer",
            "localion":"img.cloudimages.us/2012/06/02/computer.jpg",
            "type":"jpg",
            "childrenimages":
            [
                {
                    "pic_id":"15011",
                    "description":"Picture of a cpu",
                    "localion":"img.cloudimages.us/2012/06/02/mycpu.png",
                    "type":"png"
                },
                {
                    "pic_id":"15012",
                    "description":"Picture of a cpu two",
                    "localion":"img.cloudimages.us/2012/06/02/thiscpu.png",
                    "type":"png"
                }
            ]
        },
        {
            "pic_id":"1501",
            "description":"Picture of a cpu",
            "localion":"img.cloudimages.us/2012/06/02/cpu.png",
            "type":"png"
        }
    ],
};

({または[または、を閉じるのを忘れた場合はご容赦ください。SO:pにコードを入力するのはかなり難しいです)

このように、あなたは次のようなカウントを持つ必要さえありません

"products":2,

また

"childrenimages":2

あなたは単にします

foo.products.length

また

foo.products[0].childrenimages.length

幸運を :)

于 2012-06-05T15:37:02.183 に答える
2

それは実際にはそこにある配列ではなく、オブジェクトでもあるプロパティを含む単なるオブジェクトです。また、いくつかのコンマが欠落しているため、これはコンパイルされません。

この場合、より便利なのは、配列とオブジェクトの両方を使用して JSON を形成することです。例えば:

 var this_json_string = {
    "state":"Ohio",
    "country":"USA",
    "products":[
        {
          "pic_id":"1500",
          "description":"Picture of a computer",
        },

        {
          "pic_id":"15011",
          "description":"Picture of a cpu"
        },
        {
          "pic_id":"15012",
          "description":"Picture of a cpu two"
        },
        {
          "pic_id":"1501",
          "description":"Picture of a cpu"
        }
    ]
};
于 2012-06-05T16:37:14.443 に答える
1

データの適切な形式は次のとおりです(一部のデータ自体を変更したことに注意してください)

{
    "logged_in":true,
    "town":"Dublin",
    "state":"Ohio",
    "country":"USA",
    "products":2,
    "productinfo":[
        {
            "0":{
                "pic_id":"1500",
                "description":"Picture of a computer",
                "localion":"img.cloudimages.us/2012/06/02/computer.jpg",
                "type":"jpg",
                "childrenimages":2
            },
            "1":{
                "pic_id":"15011",
                "description":"Picture of a cpu",
                "localion":"img.cloudimages.us/2012/06/02/mycpu.png",
                "type":"png"
            },
            "2":{
                "pic_id":"15012",
                "description":"Picture of a cpu two",
                "localion":"img.cloudimages.us/2012/06/02/thiscpu.png",
                "type":"png"
            },
            "3":{
                "pic_id":"1501",
                "description":"Picture of a cpu",
                "localion":"img.cloudimages.us/2012/06/02/cpu.png",
                "type":"png"
            }
        }
    ]
}
于 2012-06-05T15:43:22.520 に答える
-4

JSONを記述しないでください。真剣に、単純な構成ファイルを除いて、JSONを書かないでください。

ほとんどの言語(存在しない場合)でオブジェクトをJSON文字列に変換するユーティリティがあります。

PHP:json_encode($array);

Javascript:JSON.stringify( obj );

等。

JSONを手動で作成すると、構文エラーが発生することがよくあります。カンマまたはw/eが欠落していることがわかるまで、頭痛の種になります。これを行うための優れたツールがあり、それらを使用します。XMLと比較することはできますが、JSONには、入力中に「この構文が間違っています」と言うツール(IDE、テキストエディター)がありません。たとえば、二重引用符ではなく一重引用符を使用したことを通知する編集者はいません。

JSONを記述しないでください。

于 2012-06-05T15:37:19.530 に答える