【问题标题】:Parse Json Object into an two dimensional array in JavaScript在 JavaScript 中将 Json 对象解析为二维数组
【发布时间】:2021-05-26 06:31:20
【问题描述】:

我想将一个 JSON 对象解析为一个二维数组。但是我的代码不起作用。 这是我的例子:


{
"test":[
  {
    "id": 1,
    "first_name": "Robert",
    "last_name": "Schwartz",
    "email": "rob23@gmail.com"
  },
  {
    "id": 2,
    "first_name": "Lucy",
    "last_name": "Ballmer",
    "email": "lucyb56@gmail.com"
  },
  {
    "id": 3,
    "first_name": "Anna",
    "last_name": "Smith",
    "email": "annasmith23@gmail.com"
  }
]
};
var as = JSON.parse(test);
console.log(as)

我认为我可以使用 parse 函数解析一个标准化数组。但它不起作用。

结果数组应该是这样的:

[[1,"Robert","Schwartz","rob23@gmail.com"],[2,"Lucy","Ballmer","lucyb56@gmail.com"],[3,"Anna","Smith", "annasmith23@gmail.com"]]

感谢您提供所有解决方案。

【问题讨论】:

  • test 不是 JSON。它是一个 JavaScript 对象。您无法解析 JavaScript 对象。 JSON 是一种字符串格式。你只能解析字符串。
  • 对不起,我现在看到并更正了。现在它应该是一个 JSON 对象。对?你有解析它的想法吗?
  • 好的,但是你能告诉我它是什么样子的吗,例如测试对象?
  • JSON 对象是什么意思? JSON 是一种文本格式。这是一个字符串。
  • 您评论中的 sn-p 是一个对象数组。没有 JSON。如果这是一个字符串,它是 JSON,但不是 JSON 数组或 JSON 对象。 JSON 对象是类 JSON 的一个实例。

标签: javascript arrays jscript


【解决方案1】:

您可以简单地这样做,它将映射测试并返回包含每个对象的值的数组:

const twoDimArr= test.map(obj => Object.values(obj))

【讨论】:

  • 已经发布的两个答案都提到了这一点。
  • 你有一个正常循环的想法,因为 JScript 不接受箭头函数。
  • 你可以像 test.map( function(obj) {Object.values(obj)} ) 那样把它改成普通函数
  • 但是使用地图功能是同样的问题。我现在映射函数箭头函数和 Object.values 函数不起作用。我需要一个特定元素的循环。
【解决方案2】:

对象值数组

使用.map() 方法运行数组,并使用Object.values() 将数组中的每个对象转换为值数组。顺便说一句,不需要解析对象数组,它已经正确格式化为纯 JavaScript 对象数组。

.map()Object.values() 方法

const data = [
  {
    "id": 1,
    "first": "Robert",
    "last": "Schwartz",
    "email": "rob23@gmail.com"
  },
  {
    "id": 2,
    "first": "Lucy",
    "last": "Ballmer",
    "email": "lucyb56@gmail.com"
  },
  {
    "id": 3,
    "first": "Anna",
    "last": "Smith",
    "email": "annasmith23@gmail.com"
  }
];

const objToArrVal = arrOfObj => {
  return arrOfObj.map(obj => Object.values(obj));
}

console.log(objToArrVal(data));

对于可能与 JScript 兼容的相同结果,另一种方法是:

  1. for...in loop 中运行对象数组(例如arrayOfObjects[0])中的第一个对象以获取对象键数组(例如keyArray = ['id', 'first', 'last', 'email'])--(我们假设所有对象都具有相同的一组键)。

  2. 一旦创建了键数组,我们在for loop 中运行arrayOfObjects 的每个对象。

  3. for 循环的每次迭代中,我们在另一个for 循环中运行对象,该循环会将对象的每个值 (arrayOfObject[outerLoopCount][keyArray[innerLoopCount]]) 提取到一个子数组中。

  4. 一旦内部和外部循环完成将对象的值提取到子数组中(例如valueArray),它就会被添加到最终的数组数组中(例如resultArray)。

for 循环和for...in 循环

const data = [{
    "id": 1,
    "first": "Robert",
    "last": "Schwartz",
    "email": "rob23@gmail.com"
  },
  {
    "id": 2,
    "first": "Lucy",
    "last": "Ballmer",
    "email": "lucyb56@gmail.com"
  },
  {
    "id": 3,
    "first": "Anna",
    "last": "Smith",
    "email": "annasmith23@gmail.com"
  }
];

function forLoopAO(arrOfObj) {
  var keyArr = [];
  var result = [];

  for (var key in arrOfObj[0]) {
    keyArr.push(key);
  }

  for (var o = 0; o < arrOfObj.length; o++) {
    var obj = arrOfObj[o];
    var valArr = [];

    for (var k = 0; k < keyArr.length; k++) {
      valArr.push(obj[keyArr[k]]);
    }
    result.push(valArr);
  }
  return result;
}

console.log(forLoopAO(data));

【讨论】:

  • 我将其更正为 JSON 对象。你有什么想法吗?
  • 你从哪里弄来的垃圾?看起来它被任意嵌套在括号中只是为了踢。
  • 首先它只是 JSON,而不是 JSON 对象。 JSON 是一个字符串,它表示一个数据结构,在解析时可以是 JavaScript 数组或对象。因此,为了避免进一步混淆,请将其括在引号中。
  • 你的代码是我想要的,但是 JScript 不接受任何地图函数或箭头函数。
  • 也许你应该删除javascript标签?
【解决方案3】:

一个简单的for loop 就可以了

let results = [];
for (let i=0; i<test.length; i++) {
   results.push(Object.values(test[i]));
}

编辑:

如果您无权访问 Object.values 函数,您可以使用另一个循环来遍历对象键并使用它们来访问它的属性

let results = [];
for (let i=0; i<test.length; i++) {
    for (let key in test[i]) {
        results.push(test[i][key]);
    }
}

【讨论】:

  • 我遇到的问题是 Object.values 函数在 JScript 上不起作用。你有解决问题的想法吗?
  • @Rob98,我已经扩展了我的答案
【解决方案4】:

您无法解析 JavaScript 对象。 JSON 是一种文本格式。您只能解析文本。该数组位于对象的属性text 中。您可以使用.test['test'] 访问它。然后你必须将每个对象转换为一个值数组。最简单的方法是使用mapObject.values

const test = {
"test":[
  {
    "id": 1,
    "first_name": "Robert",
    "last_name": "Schwartz",
    "email": "rob23@gmail.com"
  },
  {
    "id": 2,
    "first_name": "Lucy",
    "last_name": "Ballmer",
    "email": "lucyb56@gmail.com"
  },
  {
    "id": 3,
    "first_name": "Anna",
    "last_name": "Smith",
    "email": "annasmith23@gmail.com"
  }
]
};
const as = test.test.map(el => Object.values(el));
console.log(as)

如果你收到一个字符串,你必须解析它:

const test = `{
"test":[
  {
    "id": 1,
    "first_name": "Robert",
    "last_name": "Schwartz",
    "email": "rob23@gmail.com"
  },
  {
    "id": 2,
    "first_name": "Lucy",
    "last_name": "Ballmer",
    "email": "lucyb56@gmail.com"
  },
  {
    "id": 3,
    "first_name": "Anna",
    "last_name": "Smith",
    "email": "annasmith23@gmail.com"
  }
]
}`;
const as = JSON.parse(test).test.map(el => Object.values(el));
console.log(as)

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 2014-12-02
    • 1970-01-01
    • 2015-06-22
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多