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

How to access an attribute from a JSON line saved in a position from an array?

本文关键字:位置 JSON 属性 访问 保存 存在 数组      更新时间:2023-09-26

这可能是一个非常简单的问题,但我似乎真的无法解决。

我有几个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"。

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

我建议您在推送注释时解析所有json,比如:

notes.push(JSON.parse(JSONLine))

如果你在某种程度上倾向于在数组中使用json字符串而不是对象(我不建议这样做),那么一旦你有了jsonLine-id-,你就可以一直解析

JSON.parse(notes[id]).id

基本上,无论哪种解决方案,您都希望使用JSON.parse,我强烈建议您一开始就将它们转换为对象。

您需要记住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;

演示

这就留下了为什么要有一个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

这是因为在键值对中有{"id": "value"...作为字符串。"id"是一个字符串,因此不能像属性一样引用它。1.使用

var notes = JSON.parse(notes);

正如the alpha的评论中所提到的或删除引号尝试

{id:"26", ...} 

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