Я хочу регулярно выражать значение ответа JSON в AJAX без потери структуры JSON. вот это аякс
$.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, поэтому я подумал, что это нормально, если я регулярно использую первый URL-адрес перед «display_type»: 1, но я не могу, потому что это не строка для регулярного выражения.
/(https?\://[^\" ][^]).*("display_type":1)/i
Регулярное выражение не завершено, потому что я видел проблему со строкой, которую я не пытался завершить регулярное выражение...
Используйте JSON.parse(responseString), затем найдите изображения в json <jsonObject>.images.forEach(item => {if item["display_type"] == 1 ....})
JSON и регулярное выражение не являются хорошими друзьями. Используйте парсер, это проще, быстрее и гораздо удобнее в сопровождении.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Тип ответа всегда анализируется JSON. Вы можете просто получить доступ к изображениям с display_type: 1 следующим образом:
let fileterImages = data.data.images.map((image) => {
if (image.display_type === 1) return image.url;
}
Вы можете проанализировать 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 это работает Я пытался искать в Google, но видел только разные структуры функций.
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.info(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 не может быть истинным И 1. Вы должны использовать || быть правдой ИЛИ 1. В моем отредактированном ответе вы можете видеть, что я не сравниваю display_type , Javascript автоматически проверит, является ли переменная истинной или 1
вам нужно будет разобрать json