【问题标题】:Regex values in JSON responseJSON 响应中的正则表达式值
【发布时间】:2019-08-01 21:34:17
【问题描述】:

我想在 AJAX 中正则表达式 JSON 响应值,而不会丢失 JSON 的结构。 这是ajax

$.ajax({
    url: "date.php",
    type: "POST",
    data: formData,
    processData: false,
    contentType: false,
    dataType: "json",
    headers: {
        "X-Requested-With": "XMLHttpRequest",
    },
    success: function(data) {
        var formDatax = new FormData();
        var date = data.results;
        var res = date.map(function(item) {
            return { 
            "images": item.images
            };
        });

        $.ajax({
            url: "json.php",
            type: "POST",
            data: JSON.stringify(res),
            processData: false,
            contentType: false,
            dataType: "json",
            headers: {
                "X-Requested-With": "XMLHttpRequest",
            },
            success: function(data) {

            },
            error: function() {}
        });
    },
    error: function() {}
});

这是 JSON 响应的示例

{  
      "part_number_key":"DDASDAS",
      "name":"ASD",
      "description":"asd",
      "price":12,
      "general_stock":12,
      "brand":"ASD",
      "category_id":2776,
      "images":[  
         {  
            "url":"https://asd.com/asd/asd/1241.jpg",
            "display_type":1
         },
         {  
            "url":"https://asd.com/asd/asd/73223.jpg",
            "display_type":0
         },
         {  
            "url":"https://asd.com/asd/asd/214121.jpg",
            "display_type":0
         }
      ],
      "warranty":24
   },

我想获取 display_type 值为 1 的图像的链接,所以我认为如果我正则表达式 "display_type":1 之前的第一个 url 就可以了,但我不能,因为这不是正则表达式的字符串.

/(https?\:\/\/[^\" ][^]).*("display_type":1)/i

正则表达式,它不完整,因为我看到了关于我没有尝试完成正则表达式的字符串的问题...

【问题讨论】:

  • 你必须解析 json
  • 使用JSON.parse(responseString)然后在你的json中查找图片<jsonObject>.images.forEach(item => {if item["display_type"] == 1 ....})
  • JSON 和正则表达式不是好朋友。使用解析器,它更简单、更快且更易于维护。

标签: javascript arrays json regex response


【解决方案1】:

响应类型总是解析为 JSON。您可以像这样访问具有display_type: 1 的图像:

let fileterImages = data.data.images.map((image) => {
  if(image.display_type === 1) return image.url;
}

【讨论】:

    【解决方案2】:

    您可以解析 JSON 并使用过滤器和映射来获取图像 URL

    success: function(data) {
       var response = JSON.parse(data)
       var imagesURL = response.images.filter(image => image.display_type).map(image => image.url)
    }
    

    【讨论】:

    • var imagesURL = item.images.filter(image => image.display_type === 1).map(image => image.url) 对我来说是正确的方法,因为它位于 res 变量的位置。非常感谢!!!
    • 还有一个问题,我刚才又看到了一个问题...有些响应的值为 true,而不是 1,我尝试var imagesURL = item.images.filter(image => image.display_type === 1 && image.display_type === true).map(image => image.url) 检查多个条件但不起作用,我真的不知道 .filter 它是如何工作的,我试图在谷歌上搜索,但我只看到了不同的功能结构。
    • var imagesURL = item.images.filter(image => image.display_type === 1).map(image => image.url) var imagesURLtr = item.images.filter(image => image.display_type === true).map(image => image.url) console.log(imagesURL); if (imagesURL.length > 0) { var imagesURLf = item.images.filter(image => image.display_type === 1).map(image => image.url) }else if (imagesURLtr.length > 0) { var imagesURLf = item.images.filter(image => image.display_type === true).map(image => image.url) } 我做到了,现在可以了!
    • 在您的尝试中,您使用了 && 条件,但 display_type 不能为 true AND 1。您应该使用 ||为真或 1。在我编辑的答案中,您可以看到我不比较 display_type ,Javascript 将自动检查变量是否为真或 1
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2016-11-18
    • 2021-07-28
    • 1970-01-01
    • 2014-11-09
    • 2021-10-14
    • 2016-05-04
    相关资源
    最近更新 更多