如何将json从特定的数组字符串解析为数组对象?

时间:2018-04-26 14:46:10

标签: javascript arrays json

JSON对象:

{
    "data": {
        "myStatus": "[1 2 21 0 50 0 0 0],[2 1 3 1 50 0 0 0]"
    },
    "success": true
}

当我们转换为json对象时,返回myStatus只是字符串。 想要转换/解析为数组..

通常它应该在json对象中返回,如下所示。

var jsonObj= JSON.parse(<abovestring>);
jsonObj.data.myStatus[0] => [1 2 21 0 50 0 0 0];
jsonObj.data.myStatus[0][0] => 1
jsonObj.data.myStatus[0][1] => 2
jsonObj.data.myStatus[0][2] => 21

有可能像这样分开吗?

2 个答案:

答案 0 :(得分:2)

您可以使用String#splitArray#map来执行此操作:

let str = "[1 2 21 0 50 0 0 0],[2 1 3 1 50 0 0 0]";
let arr = str
  .split(',')
  .map(item => item.slice(1, -1))
  .map(item => item.split(' '));

console.log(arr);

但这是非常脏的方法,如果字符串格式发生变化,则容易出错。您应该尝试修复JSON格式。

答案 1 :(得分:0)

列表周围的引号使JSON.parse将其视为字符串,因为它实际上是一个字符串。

尝试通过删除引号将其更改为有效数组,在数组周围添加[]方括号,并在元素之间添加,逗号,例如:

{
    "data": {
        "myStatus": [[1, 2, 21, 0, 50, 0, 0, 0], [2, 1, 3, 1, 50, 0, 0, 0]]
    },
    "success": true
}

如果你无法控制你的json字符串并且它必须包含data.myStatus的字符串,那么你需要一个额外的步骤来手动解析它。 e.g

var string = jsonObj.data.myStatus;
string = `[${string}]`;
string = string.replace(/ +/g, ',');
jsonObj.data.myStatus = JSON.parse(string);