【问题标题】:How to Edit JSON using Javascript?如何使用 Javascript 编辑 JSON?
【发布时间】:2017-04-08 11:51:22
【问题描述】:

我在JSONArray 中有一个JSONObject(如下面的 JSON)。现在我必须将productID 值添加为对象的KEY,如Required JSON。我正在尝试通过javascript来做到这一点。但我无法获得所需的输出。

我试图在 Google 上找到任何解决方案。但这行不通。 谁能指导我如何做到这一点或向我展示任何参考资料?

原始 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
}

【问题讨论】:

  • 结果不是有效的javascript。
  • “必需的 JSON”无效。这不是 JSON,而是对象数组
  • required JSON可以是一个对象,而不是一个数组。
  • 您的结果不能是您建议的结果,但可以是对象数组,例如[ { "C05M01P001: {...}}, {"C05M01P002": {...}} ] 或(可能更有意义)单个对象 {"C05M01P001: {...}, "C05M01P002": {...}} - 你需要哪个?
  • 抱歉给您带来了困惑。正如 Err Hunter 所建议的,它是一个 JSON 对象。

标签: javascript arrays json object


【解决方案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"
    }
}

【讨论】:

  • 产品名称中的字体显示不正确。我该如何解决?
  • 您必须在您的网站中使用相应的语言字体/字符集。 Google for Bamini Tamil 字体,以及如何包含和使用字体。
【解决方案2】:

您可以使用reduce 方法,该方法接受callback 方法并将函数应用于累加器和数组中的每个元素(从左到右)以将其减少为单个值。

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;
},{}));

【讨论】:

  • 问的不是这个。但是最好有{"C05M01P001": { "productID": "C05M01P001",[ "C05M01P001": { "productID": "C05M01P001",
  • 是的,最接近 OP 的问题。
  • @ErrHunter:嗯,也许吧。在发布可能根本不是 OP 需要的推测性答案之前,最好先进行澄清。
  • @T.J.Crowder,我同意。
  • OP 将问题更改为具有正确的对象结构,因此您只需删除外部数组
【解决方案3】:

您只需遍历数组,创建一个具有由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;
}, {});

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.reduce(function(obj, entry) {
  obj[entry.productID] = entry;
  return obj;
}, {});
console.log(updated);

【讨论】:

    【解决方案4】:

    通常.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+),我完全不建议使用递归方法。

    【讨论】:

      【解决方案5】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2021-09-04
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-21
        • 2016-01-19
        • 1970-01-01
        相关资源
        最近更新 更多