1. ホーム
  2. javascript

[解決済み] ネストされたJSONオブジェクト - すべてに配列を使用しなければならないのか?

2022-05-17 10:33:39

質問

JSONでオブジェクトを入れ子にして、すべてを配列にする必要がないようにする方法はありますか? 私のオブジェクトがエラーなしでパースされるには、このような構造が必要なようです。

{"data":[{"stuff":[
    {"onetype":[
        {"id":1,"name":"John Doe"},
        {"id":2,"name":"Don Joeh"}
    ]},
    {"othertype":[
        {"id":2,"company":"ACME"}
    ]}]
},{"otherstuff":[
    {"thing":
        [[1,42],[2,2]]
    }]
}]}

このオブジェクトを "result" という変数に取り込むと、このようにネストされたオブジェクトにアクセスする必要があります。

result.data[0].stuff[0].onetype[0]

result.data[1].otherstuff[0].thing[0]

これは、私には不器用で冗長に見えます。可能であれば、私はそうしたいと思います。

result.stuff.onetype[0]

result.otherstuff.thing

しかし、すべてが配列であるときに、どうやってオブジェクトのキーを直接使うことができるのでしょうか?私の混乱した無学な頭には、このようなものがより適切に思えるのです。

{"data":
    {"stuff":
        {"onetype":[
            {"id":1,"name": ""},
            {"id":2,"name": ""}
        ]}
        {"othertype":[
            {"id":2,"xyz": [-2,0,2],"n":"Crab Nebula","t":0,"c":0,"d":5}
        ]}
    }
    {"otherstuff":
        {"thing":
            [[1,42],[2,2]]
        }
    }
}

私はおそらくここで何か根本的なことを誤解しているのですが、jQueryパーサー(jQuery1.4で使用されるネイティブFFパーサーも)が2番目のスタイルオブジェクトを受け入れるようにすることはできません。どなたかご教示いただけるとありがたいです。

どのように解決するのですか?

配列を使用する必要はありません。

JSONの値には、配列、オブジェクト、プリミティブ(数値や文字列)を使用することができます。

JSONはこのように書くことができます。

{ 
    "stuff": {
        "onetype": [
            {"id":1,"name":"John Doe"},
            {"id":2,"name":"Don Joeh"}
        ],
        "othertype": {"id":2,"company":"ACME"}
    }, 
    "otherstuff": {
        "thing": [[1,42],[2,2]]
     }
}

このように使うことができます。

obj.stuff.onetype[0].id
obj.stuff.othertype.id
obj.otherstuff.thing[0][1]  //thing is a nested array or a 2-by-2 matrix.
                            //I'm not sure whether you intended to do that.