更改JSON格式/布局

时间:2019-02-26 02:39:17

标签: javascript jquery arrays json object

我的网站上有一个通用变量,其中包含具有相关详细信息的订单项。这些订单项反映了用户在购物车中的物品。我正在与第三方集成,后者要求传递给他们的数据的格式略有不同。以下是我网站上当前的数据层:

"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跟踪代码管理器将其发送给第三方。

任何帮助将不胜感激。欢迎任何疑问。

2 个答案:

答案 0 :(得分:0)

这应该接近您想要的内容。

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];
    }
}

答案 1 :(得分:0)

请参见下面的代码。 我不确定您的lineItems对象是如何设置的,但是下面我只是创建了一个名为line Items的数组。如果我从上面的代码段中怀疑订单项是对象的关键,那么您将必须在下面的示例中使用的for循环中更深入一些。

只需在下面的for循环嵌套中向新对象添加更多详细信息即可。

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.log(JSON.stringify(newLineItems));