我在JSONObject
内有一个JSONArray
(如下面的JSON)。现在,我必须将productID
值添加为对象的KEY
,例如Required JSON
。我试图通过javascript做到这一点。但我无法获得所需的输出。
我试图在Google上找到任何解决方案。但它没有成功。 任何人都可以指导我如何做或向我展示任何参考?
ORIGINAL JSON
[
{
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechert.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
},
..... it goes on
]
必需的JSON
{
"C05M01P001" : {
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole ",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechenart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg",
"productCID": "C05",
"productMID": "M01"
},
..... it goes on
}
答案 0 :(得分:1)
您可以使用reduce
方法,该方法接受callback
方法并对累加器和数组中的每个元素(从左到右)应用函数以将其减少为单个值。 / p>
var json=[
{
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
},
{
"productID": "C05M01P002",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
}
]
console.log(json.reduce(function(object,item){
object[item.productID]=item;
return object;
},{}));

答案 1 :(得分:1)
你可以用一个循环实现它,
var inputJson = [{
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
}, {
"productID": "C05M01P002",
"productName": "XYZ - Whole Wheat (முழு கோதுமை)",
"productUnit": "1.3 kg",
"productPrice": "Rs.40.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "XYZ - Whole Wheat 1.3 kg..",
"productCID": "C05",
"productMID": "M01"
}];
var outputJson = {};
inputJson.forEach((singleProduct) => {
outputJson[singleProduct.productID] = singleProduct;
});
console.log(outputJson);

输出将是,
{
"C05M01P001": {
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
},
"C05M01P002": {
"productID": "C05M01P002",
"productName": "XYZ - Whole Wheat (முழு கோதுமை)",
"productUnit": "1.3 kg",
"productPrice": "Rs.40.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "XYZ - Whole Wheat 1.3 kg..",
"productCID": "C05",
"productMID": "M01"
}
}
答案 2 :(得分:0)
您只需遍历数组,创建一个对象,其属性由No Proxy
属性键入。您可以使用简单的item
:
forEach
var updated = {};
original.forEach(function(entry) {
updated[entry.productID] = entry;
});
(或者甚至只是一个var original = [
{
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
}
];
var updated = {};
original.forEach(function(entry) {
updated[entry.productID] = entry;
});
console.log(updated);
循环。)
或for
,虽然有些人认为这是“滥用”:
reduce
var updated = original.reduce(function(obj, entry) {
obj[entry.productID] = entry;
return obj;
}, {});
答案 3 :(得分:0)
通常.reduce()
是这项工作的工具,但由于它已经给出,对于各种各样,你也可以尝试递归方法如下;
var os = [{x:1,y:"test"},{x:2,y:"more"},{x:3,y:"test"}],
folder = (a,p) => a.length && Object.assign({[a[0][p]]:a[0]},folder(a.slice(1),p));
console.log(folder(os,"x"));
虽然在JS中如果你有一个很长的对象数组(100K +),我不建议使用递归方法。
答案 4 :(得分:0)
试试这个:
var jsonObj = [
{
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
},
{
"productID": "C05M01P002",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
}
];
var obj = {};
for (var i in jsonObj) {
obj[jsonObj[i].productID] = jsonObj[i];
}
console.log(obj);