0

私はJSを初めて使用し、以前はC / C ++で作業していましたが、JSONで以下のC構造体に相当するものが必要です。

struct tmp_t{
int a;
char c_str[1024];
};

struct tmp2_t{
int a2;
.
.
char c2_str[1024];
};

struct my {
int number;
struct tmp_t tmp[100];
struct tmp2_t tmp2[100][1000];
};

のようなjsonの場合

var myJSON = {
"number":0,
.
.
};

私はそれにアクセスする必要があります

myJSON.tmp[0].a = 10;
myJSON.tmp2[0][1].c2_str = "hello world"

どんな入力でも大歓迎です

4

1 に答える 1

0

Javascriptプロパティは、Cのように型指定されていないため、javascriptには純粋に「同等の」式はありません。Cコードのように型付きデータ構造を事前に宣言することはありません。javascriptで変数またはプロパティを指定すると、任意の値または参照を割り当てることができます。ハードタイピングはありません。したがって、Cのように特定の型のみを含むことができる変数がなければ、Cから含めたようなデータ構造定義の事前宣言はありません。

代わりに、ライブオブジェクトで使用するプロパティを宣言するだけです。または、それらの多くを使用する場合は、必要に応じてインスタンス化できるプロトタイプを作成できます。

最後の構造のようなライブオブジェクトインスタンスの直接宣言は、次のようになります。

var my = {
    number: 10,
    tmp: new Array(100),
    tmp2: new Array(100)
};

これは、、、およびとmy呼ばれる3つのプロパティを持つという名前のオブジェクトを宣言します。 最初は数値が含まれ、他の2つのプロパティには、値がである長さ100の配列が含まれていました。ループでコードを実行して初期化せずに、JavaScriptで2次元配列を事前定義するコンパクトな方法を知りません。numbertmptmp2number10undefined

my.numberこのデータ定義により、などにアクセスできるmy.tmpようになります。

配列にプロパティ自体を持つオブジェクトを含める場合は、それらの配列にオブジェクトを設定する必要があります。

var my = {
    number: 10,
    tmp: [{a: 1, c_str: "foo"}, {a: 2, c_str: "whatever"}],
    tmp2: new Array(100)
};

または、コードで、次のようなコードを使用してtmp配列にアイテムを追加できます。

var my = {
    number: 10,
    tmp: [],
    tmp2: []
};

my.tmp.push({a: 1, c_str: "foo"});
my.tmp.push({a: 2, c_str: "whatever"});

または、オブジェクトを個別に作成してから、配列に配置することもできます。

var obj = {};        // new empty object
obj.a = 1;           // assign property
obj.c_str = "foo";   // assign property
my.tmp.push(obj);    // put object into the array
obj = {};            // new empty bject
obj.a = 2;
obj.c_str = "whatever";
my.tmp.push(obj);

または、次のように各プロパティを個別に割り当てることができます。

my.tmp.push({});           // put empty object into the array
my.tmp[0].a = 1;           // assign property to the object
my.tmp[0].c_str = "foo";   // assign property to the object
my.tmp.push({});
my.tmp[1].a = 2;
my.tmp[1].c_str = "whatever";

いずれの場合も、次のようにデータにアクセスできます。

console.log(my.tmp[0].a);       // 1
console.log(my.tmp[0].c_str);   // "foo"
于 2012-05-20T05:24:00.897 に答える