Javascript 如何转换对象或数组中的字符串消息错误?

Javascript 如何转换对象或数组中的字符串消息错误?,javascript,json,Javascript,Json,我从api收到此错误响应: [HTTP 400]-错误的\u请求0[53015]-发送方名称无效值:almir1 [53044]-信用卡持有人姓名无效值:almir 如何将此响应转换为javascript中的对象或数组 例如: var errors = [ {key : 53015: message: "sender name invalid value"}, {key : 53044: message: "credit card holder name

我从api收到此错误响应:

[HTTP 400]-错误的\u请求0[53015]-发送方名称无效值:almir1 [53044]-信用卡持有人姓名无效值:almir

如何将此响应转换为javascript中的对象或数组

例如:

     var errors = [
        {key : 53015: message: "sender name invalid value"},
        {key : 53044: message: "credit card holder name invalid value: almir"}
    ];

您可以使用:var aRes=str.split('[');
要获取由“[”分割的字符串数组,然后进一步将这些aRes字符串处理为所需的json“error”对象。

这应该可以做到:

const text = `[HTTP 400] - BAD_REQUEST 0 [53015] - sender name invalid 
value: almir1 [53044] - credit card holder name invalid value: almir`;
let regex = /\[([^\]]+?)\]\s\-\s([^\[]+)/g;
let matches;
const errors = {};
while (matches = regex.exec(text)) {
    errors[matches[1]] = matches[2];
}
输出:

{
    "53015": "sender name invalid value: almir1 ",
    "53044": "credit card holder name invalid value: almir",
    "HTTP 400": "BAD_REQUEST 0 "
}
[
    {
        "key": "HTTP 400",
        "message": "BAD_REQUEST 0 "
    },
    {
        "key": "53015",
        "message": "sender name invalid value: almir1 "
    },
    {
        "key": "53044",
        "message": "credit card holder name invalid value: almir"
    }
]
要创建密钥/消息数组,请改为使用此

const text = `[HTTP 400] - BAD_REQUEST 0 [53015] - sender name invalid value: almir1 [53044] - credit card holder name invalid value: almir`;
let regex = /\[([^\]]+?)\]\s\-\s([^\[]+)/g;
let matches;
const errors = [];
while (matches = regex.exec(text)) {
    errors.push({
        key: matches[1],
        message: matches[2]
    });
}
输出:

{
    "53015": "sender name invalid value: almir1 ",
    "53044": "credit card holder name invalid value: almir",
    "HTTP 400": "BAD_REQUEST 0 "
}
[
    {
        "key": "HTTP 400",
        "message": "BAD_REQUEST 0 "
    },
    {
        "key": "53015",
        "message": "sender name invalid value: almir1 "
    },
    {
        "key": "53044",
        "message": "credit card holder name invalid value: almir"
    }
]

要生成数组,可以匹配每个错误的模式:

var regex = /\[\d+\]\s\-\s([^\[+]+)/gi
errorMessage.match(regex);

// returns 
// [ '[53015] - sender name invalid value: almir1 ',
//  '[53044] - credit card holder name invalid value: almir' ]
如果要将其转换为对象,可以使用捕获组:

var regex = /\[(\d+)\]\s\-\s([^\[]+)/gi
var errors = {};
var error;
while (error = regex.exec(errorMessage)) {
  errors[error[1]] = error[2];
}

您的示例没有显示,可以再试一次吗?抱歉,我已修复。看起来像是简单的字符串处理问题。对不起,伙计们,我已再次修复。这仍然不会创建对象。@Paul在浏览器控制台中执行时,它会打印最后一个匹配项。请尝试console.log(错误)是的,它打印的是一个数组而不是一个对象。@Paul:对我来说效果很好。也许你应该检查一下你复制的代码是否正确?它实际上是复制粘贴的,我没有键入任何内容。注意,自从我发表评论以来,代码已经更改了。