如何使用Javascript编辑JSON?

时间:2017-04-08 11:51:23

标签: javascript arrays json object

我在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
}

5 个答案:

答案 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);