如何使用 JS 解析和交换 JavaScript 对象



实际输出:

 {
   "workbookInformation": {
    ...
  },
  "dashboard1": {
    "auto-hidden": "0",
    "maximized": "1",
    "worksheet": {
      "worksheet8": "APAC",
      "worksheet2": "Freq_SC_Value",
      "worksheet3": "L1 Type Filter",
      "worksheet1": "Pillar Name"
    },
    "class": "dashboard",
    "name": "AnalysisByGeography"
  },
  "dashboard2": {
    ...
  },
  "datasources3": {
    ...
  }
}

所需输出 :

      {
  "workbookInformation": {
    ...
  },
  "AnalysisByGeography": {
    "auto-hidden": "0",
    "maximized": "1",
    "worksheet": {
      "APAC": "worksheet8",
      "Freq_SC_Value": "worksheet2",
      "L1 Type Filter": "worksheet3",
      "Pillar Name": "worksheet1"
    },
    "class": "dashboard",
    "name": "AnalysisByGeography"
  },
  "dashboard2": {
    ...
  },
  "datasources3": {
    ...
  }
}

我尝试使用提供键名的代码。 我尝试了"//jashkenas.github.io/underscore/underscore-min.js"来交换密钥。我尝试了外部JS文件来反转键值对。

尝试使用 JSON.stringify(youredata) .否则,您可能需要拆分给定的数据并将具有相同函数的数组转换为 json 类型。

好的,在这里我为你写了如何做,因为我看不到更多如何解释它。但我强烈建议,如果你从 JavaScript 开始,在问这些类型的问题之前先了解更多。

也许可能需要其他验证。此外,我只对以"dashboard"开头的键这样做,尽管我认为它可能适用于所有键之后有一个字符串加一个数字并且包含一个包含键"名称"的对象。如果你想学习,你应该自己解决这个问题,因为你在这里有一个相当强大的基础。

希望你能像我一样找到学习,现在仍然有!

var data = 
{
  "workbookInformation": {
    "a": "..."
  },
  "dashboard1": {
    "auto-hidden": "0",
    "maximized": "1",
    "worksheet": {
      "worksheet8": "APAC",
      "worksheet2": "Freq_SC_Value",
      "worksheet3": "L1 Type Filter",
      "worksheet1": "Pillar Name"
    },
    "class": "dashboard",
    "name": "AnalysisByGeography"
  },
  "dashboard2": {
    "a": "..."
  },
  "datasources3": {
    "a": "..."
  }
}
var isDashboard = new RegExp('dashboard[0-9]+', 'i');
var isWorksheet = new RegExp('worksheet[0-9]+', 'i');
for(var dataKey in data) {
	var innerData = data[dataKey];
	if (typeof(innerData["worksheet"]) == "object") {
		var newWS = {};
		for(var wsKey in innerData["worksheet"]) {
			newWS[innerData["worksheet"][wsKey]] = wsKey;
		}
		innerData["worksheet"] = newWS;
	}
	if (isDashboard.test(dataKey) && innerData['name']) {
		delete data[dataKey];
		dataKey = innerData['name'];
	}
	
	data[dataKey] = innerData;
}
console.log(data);

最新更新