【问题标题】:Convert Json array into normal json将 Json 数组转换为普通的 json
【发布时间】:2016-12-01 13:08:35
【问题描述】:

这是我的回应:

{
    "item": [{
        "key": "name",
        "value": "john"
    }, {
        "key": "number",
        "value": "1234"
    }, {
        "key": "price",
        "value": [{
            "item": [{
                "item": [{
                    "key": "quantity",
                    "value": "20"
                }, {
                    "key": "price",
                    "value": "200"
                }]
            }]
        }]
    }]
}

需要像这样转换:

{
    "name": "john",
    "number": "1234",
    "price": {
        "quantity": "20",
        "price": "200"
    }
}

【问题讨论】:

  • 请展示一些代码和努力尝试自己解决问题并提供问题的minimal reproducible example
  • JSON 只是描述数据结构的文本。如果您想要将对象数组合并为单个对象,那么您需要做的就是创建一个递归函数来创建一个对象,然后迭代数组,向对象添加新项目,例如result[arr[i].key] = arr[i].value。当.value 是一个新数组时,进行递归调用。
  • 为什么有嵌套的项目属性?

标签: javascript json


【解决方案1】:

var newjsonobj = {};
var jsonObj1={"item":[{"key":"name","value":"john"},{"key":"number","value":"1234"},{"key":"price","value":[{"item":[{"key":"quantity","value":"20"},{"key":"price","value":"200"}]}]}]};
function recursive(jsonObj, newjsonobj) {
	for (var index in jsonObj) {
		if (typeof jsonObj[index]["value"] === 'object') {
			newjsonobj[jsonObj[index]["key"]] = {};
			var temp = jsonObj[index]["value"][0]["item"];
			recursive(temp, newjsonobj[jsonObj[index]["key"]]);
		} else if(jsonObj[index]["key"]){
			newjsonobj[jsonObj[index]["key"]] = jsonObj[index]["value"];
		}
	}
}
recursive(jsonObj1["item"], newjsonobj);

【讨论】:

    【解决方案2】:

    您可以对item 使用嵌套方法并迭代所有数组并为每个数组调用函数iter

    此解决方案使用Array#forEach 中的thisArg 来获取结果的下一个更深层次的对象。

    var data = { "item": [{ "key": "name", "value": "john" }, { "key": "number", "value": "1234" }, { "key": "price", "value": [{ "item": [{ "item": [{ "key": "quantity", "value": "20" }, { "key": "price", "value": "200" }] }] }] }] },
        result = {};
    
    [data].forEach(function iter(a) {
        if ('item' in a) {
            a.item.forEach(iter, this);
            return;
        }
        if (Array.isArray(a.value)) {
            this[a.key] = {};
            a.value.forEach(iter, this[a.key]);
            return;
        }
        this[a.key] = a.value;
    }, result);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多