2016-04-15 1 views
0

これは非常に簡単な質問かもしれませんが、私は実際にそれを動作させるように見えません。配列から特定の位置に保存されたJSON行の属性にアクセスするにはどうすればよいですか?

私はいくつかのJSON行とnotes配列を持っています。 私は、配列の位置ごとにJSONラインを保存していnotes.push(JSONline)を使用して、私は次のようにして、想定しています。ここ

//notes[1] 
{"id":"26","valuee":"20","datee":"2016-04-05T15:15:45.184+0100","id2":51} 
//notes[2] 
{"id":"27","valuee":"134","datee":"2016-04-05T15:15:47.238+0100","id2":53} 
//notes[3] 
{"id":"26","valuee":"20","datee":"2016-04-05T15:15:45.184+0100","id2":52} 

は私の問題です:私は1つの特定の属性を印刷する、ある特定のJSONラインの例IDの配列内にあります。これどうやってするの?

console.log(notes)を実行すると、期待通りにすべてのJSON行が印刷されます。しかし、私がconsole.log(notes[1])を実行すると、行全体ではなく、その位置にJSON行の最初の文字が表示されます。 同様にconsole.log(notes[1].id)は最初のJSON行からidを印刷しません。実際には 'undefined'が出力されます。

私は間違っていますか? ありがとうございます。

+1

編集の質問、すべてのコードを追加し、どのように要素をプッシュします – misher

+3

'notes = JSON.parse(notes)'を使って試してから、indexを使って印刷してみてください。 –

+0

jSONlineはどのように生成されますか? – imvain2

答えて

1

JSONはJSオブジェクトの文字列表現であることを覚えておく必要があります。 JS文字列には、配列と同様のインデックスアクセサメソッドがあります。なぜなら、console.log(notes[0])と書くことができ、最初の文字を返すことができるからです。

のJavaScript は、しかし、あなたがオブジェクトの表記法を使用して文字列にアクセスすることはできませんので、console.log(notes[0].id)は仕事とあなたがundefinedを取得した理由はありません。

このメソッドを使用して文字列内のデータにアクセスするには、を解析する必要があります。最初にオブジェクトへの文字列を解析します。

var notes = ['{"id":"26","valuee":"20","datee":"2016-04-05T15:15:45.184+0100","id2":51}']; 
var note0 = JSON.parse(notes[0]); 
var id = note0.id; 

DEMO

これは、JSON文字列の配列を持っている理由の疑問を残します。それは奇妙で珍しいことではありませんが、最適な解決策ではないかもしれません。代わりにオブジェクトの配列を作成し、データ構造全体を文字列化して管理しやすくすることができます。

var obj0 = { 
    "id": "26", 
    "valuee": "20", 
    "datee": "2016-04-05T15:15:45.184+0100", 
    id2: 51 
}; 

var obj1 = { 
    "id": "27", 
    "valuee": "134", 
    "datee": "2016-04-05T15:15:47.238+0100", 
    "id2": 53 
} 

var arr = [obj0, obj1]; 
var json = JSON.stringify(arr); 

OUTPUT

[ 
    { 
    "id": "26", 
    "valuee": "20", 
    "datee": "2016-04-05T15:15:45.184+0100", 
    "id2": 51 
    }, 
    { 
    "id": "27", 
    "valuee": "134", 
    "datee": "2016-04-05T15:15:47.238+0100", 
    "id2": 53 
    } 
] 

あなたはその配列と前のようなアクセスをに戻ってJSONを解析することができます

var notes = JSON.parse(json); 
notes[0].id // 26 
-1

これは、キー値のペアに文字列として{"id": "value"...が含まれているためです。 "id"は文字列なので、プロパティのように参照することはできません。 1.使用

var notes = JSON.parse(notes); 

アルファ によって、コメントで言及または引用符を削除するようにnotes[i].idが未定義

+2

引用符で囲むキーは、適切なJSON構文です。この場合、˙id˙を引用するかどうかは関係ありません。 –

+0

また、askerは 'notes'が配列であることを期待しています。ここでは、これはJSON文字列から解析されるオブジェクトになります。 – Thernys

2

を返している理由です、私はあなたがすべて解析することをお勧めします

{id:"26", ...} 

を試してみてくださいあなたがノートにプッシュしているときは、次のようになります:

notes.push(JSON.parse(JSONLine)) 

あなたが何とか代わりに、私はお勧めしませんオブジェクトの配列にJSON文字列を持つに接続されている場合、あなたは常にだけで基本的に、あなたはJSON.parseを使いたいあなたはjsonLine IDを持っていたら

JSON.parse(notes[id]).id 

を解析できどちらのソリューションでも、最初にオブジェクトをオブジェクトに変換することを強くお勧めします。

関連する問題