如何从保存在数组位置的JSON行访问属性?

时间:2016-04-15 16:48:41

标签: javascript arrays json

这可能是一个非常简单的问题,但我似乎无法使其发挥作用。

我有几个JSON行和一个notes数组。 使用notes.push(JSONline)我假设每个数组位置保存一个JSON行,所以按以下方式:

//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}

这是我的问题:我想打印一个特定的属性,例如来自数组中一个特定JSON行的id。我怎么能这样做?

当我执行console.log(notes)时,它会按预期打印所有JSON行。但是,如果我console.log(notes[1]),它会在该位置打印JSON行的第一个字符,而不是整行。 同样地,console.log(notes[1].id)不会从第一个JSON行打印id,实际上它会打印' undefined'。

我做错了什么? 非常感谢你。

3 个答案:

答案 0 :(得分:2)

我建议您在推送笔记时解析所有json,例如:

notes.push(JSON.parse(JSONLine))

如果你以某种方式附加在数组而不是对象中的json字符串,我不建议你,你可以随时解析一旦你有jsonLine id

JSON.parse(notes[id]).id

基本上,您希望将JSON.parse用于任一解决方案,我强烈建议您在开始时将它们转换为对象。

答案 1 :(得分: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);

输出

[
  {
    "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

答案 2 :(得分:-1)

那是因为你的密钥值对中有{"id": "value"...字符串。 "id"是一个字符串,因此您无法像属性一样引用它。 1.使用

var notes = JSON.parse(notes);
正如阿尔法的评论中提到的那样  或删除引号尝试

{id:"26", ...} 

这就是notes[i].id返回未定义

的原因