JavaScript 隔离字符串中的 JSON 对象

JavaScript Isolate JSON object inside a String

我正在寻求有关我在 Azure 逻辑应用程序中遇到的问题的帮助。我有一个失败的 HTTP 请求提供的 JSON 输出,如下所示:

{
  "error": {
    "code": "",
    "message": "Http request failed with statusCode=BadRequest : {\"error\":{\"code\":\"ValidationFailed\",\"message\":\"Validation of indicator content failed.\",\"target\":\"body\",\"details\":[{\"code\":\"ValidationFailed\",\"message\":\"The value 1 is not a valid domain name.\",\"target\":\"domainName\"}]}}; ",
    "innerError": {
      "date": "2021-11-25T11:12:09",
      "request-id": "",
      "client-request-id": ""
    }
  }
}

我打算做的是隔离 "message" 值,以告知我的应用程序用户应用程序失败的原因。我相信 "message" 的值是一个字符串,但是,它还包含一个 JSON 对象。如果我可以转义对象任一侧的字符,我可以解析 JSON 和 select 该对象中的值。

这是我希望能够访问的对象的更好视图:

{
  "error": {
    "code": "ValidationFailed",
    "message": "Validation of indicator content failed.",
    "target": "body",
    "details": [
      {
        "code": "ValidationFailed",
        "message": "The value 1 is not a valid domain name.",
        "target": "domainName"
      }
    ]
  }
}

如何访问这些值?我可以在我的逻辑应用程序中使用 JavaScript,所以如果有一个通过使用 JS 的简单解决方案,那就太好了。

我目前正在解析初始 JSON 对象,显示在此 post 的顶部,然后解析 "message" 值以尝试访问这些变量。然而,这不起作用,因为 "message" 的值不是对象。

如果我能够访问嵌套的 "code""message" 来输出下方,那就太好了。

ValidationFailed: Validation of indicator content failed

甚至更好..

ValidationFailed: Validation of indicator content failed - The value 1 is not a valid domain name.

感谢您对此提供的任何帮助。我目前没有 JavaScript 解决方案,我试图纯粹使用逻辑应用程序来解决这个问题。 Azure 允许内联 JavaScript 在应用程序内执行,因此任何 JavaScript 解决方案都会有所帮助。

如果需要有关此的任何更多信息,请告诉我,在解析 JSON 之前删除下面的粗体文本应该允许我在应用程序中使用该对象。

Http 请求失败,statusCode=BadRequest : `

离开对象..

{\"error\":{\"code\":\"ValidationFailed\",\"message\":\"Validation of indicator content failed.\",\"target\":\"body\",\"details\":[{\"code\":\"ValidationFailed\",\"message\":\"The value 1 is not a valid domain name.\",\"target\":\"domainName\"}]}};` 

我为了寻求帮助而查看的文章:

  1. Python 2.7 Isolate multiple JSON objects in a string
  2. What is the correct JSON content type?

首先,您需要从错误中获取消息,然后获取消息中带有花括号的值 属性。

这是我创建的用于提取错误对象的简单代码行。

const data = {
    "error": {
      "code": "",
      "message": "Http request failed with statusCode=BadRequest : {\"error\":{\"code\":\"ValidationFailed\",\"message\":\"Validation of indicator content failed.\",\"target\":\"body\",\"details\":[{\"code\":\"ValidationFailed\",\"message\":\"The value 1 is not a valid domain name.\",\"target\":\"domainName\"}]}}; ",
      "innerError": {
        "date": "2021-11-25T11:12:09",
        "request-id": "",
        "client-request-id": ""
      }
    }
  };

console.log(JSON.parse(data.error.message.match('({.*})')[1]));

console.log 将以这种格式打印结果:

{
  error: {
    code: 'ValidationFailed',
    message: 'Validation of indicator content failed.',
    target: 'body',
    details: [ [Object] ]
  }
}