Изменить формат/макет JSON

У меня есть универсальная переменная на моем веб-сайте, которая включает позиции с соответствующими деталями. Эти позиции отражают то, что у пользователя есть в корзине. Я интегрируюсь с третьей стороной, которая требует, чтобы передаваемые им данные были в несколько ином формате. Ниже приведен слой данных, который в настоящее время находится на моем веб-сайте:

"lineItems": [
    {
        "product": {
            "id": "s83y016b5",
            "sku_code": "s83y016b5",
            "url": "/en-gb/jeans/p/s83y016b5",
            "image_url": "http://www.my-website.com/a/p/shirt.jpeg",
            "name": "Jeans",
            "manufacturer": "",
            "category": "Everyday Wear",
            "stock": 116,
            "currency": "GBP",
            "unit_sale_price": 16,
            "unit_price": 16,
            "size": "6-9 Months",
            "color": "Indigo"
        },
        "quantity": 1
    }
]

Ниже показано, какой формат нужен третьему лицу:

"lineItems": [
  {
    "sku": "s83y016b5",
    "name": "Jeans",
    "description": "A super great pair of jeans.",
    "category": "Everyday Wear",
    "other": {"fieldName": "This can be a string or any value you like"}
    "unitPrice": 11.99,
    "salePrice": 11.99,
    "quantity": 2,
    "totalPrice": 23.98
    "imageUrl": "http://www.my-website.com/a/p/shirt.jpeg",
    "productUrl": "http://www.my-website.com/index.php/shirt.html",
  }]

Очевидно, что это должно быть динамическим в зависимости от продуктов в корзине. Что я собираюсь сделать, так это использовать javascript для изменения данных и отправки их третьей стороне через Диспетчер тегов Google.

Любая помощь будет принята с благодарностью. Любые вопросы приветствуются.

Почему на входе quantity: 1, а на выходе quantity: 2?

Barmar 26.02.2019 03:41

Можете ли вы объяснить каждое свойство и его преобразование?

Jack Bashford 26.02.2019 03:42

Откуда он должен взять description и productUrl?

Barmar 26.02.2019 03:44

Игнорируйте сами данные, это скорее формат JSON, который мне нужно изменить, чтобы он соответствовал тому, что нужно третьей стороне.

PODave 26.02.2019 03:44

Чтобы ответить на переполнение стека, это только часть большего объема данных, которые я отправляю третьей стороне, мне удалось отсортировать остальные в порядке, это формат строк, с которым я борюсь.

PODave 26.02.2019 03:46

Вы перебираете входной массив, создаете новый объект с нужными вам свойствами и помещаете его в результирующий массив. С какой частью у вас проблемы?

Barmar 26.02.2019 03:47

@Barmar изменил код

PODave 26.02.2019 03:48

Я не вижу никакого кода? Если вы имеете в виду, что избавились от лишнего массива, я уже заметил это и удалил свой комментарий.

Barmar 26.02.2019 03:50
newLineItems = oldLineItems.map(obj => ({ new object properties in here }))
Barmar 26.02.2019 03:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
9
138
2

Ответы 2

Это должно быть близко к тому, что вы ищете.

let oldLineItems = "your object"; 

let newLineItems = {};
newLineItems.lineItems = [];

for (let i in oldLineItems.lineItems) {
    newLineItems.lineItems[i] = {};
    for (let key in oldLineItems.lineItems[i].product)
    {
        newLineItems.lineItems[i][key] = oldLineItems.lineItems[i].product[key];
    }
}

См. код ниже. Я не уверен, как настроен ваш объект lineItems, но ниже я только что создал массив с именем line Items. Если элементы строки являются ключом в объекте, что я подозреваю из вашего фрагмента выше, вам придется углубиться в циклы for, используемые в моем примере ниже.

Просто добавьте дополнительную информацию к новому объекту во вложенных циклах for in ниже.

var lineItems =
[
    {
        "product": {
            "id": "s83y016b5",
            "sku_code": "s83y016b5",
            "url": "/en-gb/jeans/p/s83y016b5",
            "image_url": "http://www.my-website.com/a/p/shirt.jpeg",
            "name": "Jeans",
            "manufacturer": "",
            "category": "Everyday Wear",
            "stock": 116,
            "currency": "GBP",
            "unit_sale_price": 16,
            "unit_price": 16,
            "size": "6-9 Months",
            "color": "Indigo",
            "description": 'Some random description'
        },
        "quantity": 1
    },
    {
        "product": {
            "id": "s83y01699",
            "sku_code": "s83y01699",
            "url": "/en-gb/pants/p/s83y016b5",
            "image_url": "http://www.my-website.com/a/p/pants.jpeg",
            "name": "Pants",
            "manufacturer": "",
            "category": "Casual Wear",
            "stock": 90,
            "currency": "au",
            "unit_sale_price": 14,
            "unit_price": 14,
            "size": "6-9 Months",
            "color": "Indigo",
            "description": 'Some random description'
        },
        "quantity": 14
    },
];

var newLineItems = [];

for(var char in lineItems){
	// Adding some values to newLineItems.
	newLineItems.push({
		sku: lineItems[char].product.sku_code,
		name: lineItems[char].product.name,
		description: lineItems[char].product.description,
		category: lineItems[char].product.category,
		quantity: lineItems[char].quantity
	});
}
console.info(JSON.stringify(newLineItems));

Большое спасибо за вышесказанное, это помогло мне приблизиться к завершению этого... наконец :)

PODave 28.02.2019 14:27

Другие вопросы по теме