我正在尝试通过类似这样的无限嵌入级别来展平任何类型的 json 对象:
[
{
"one": 1,
"two": 2,
"three": [
{
"four": 4,
"five": 5
},
{
"six": 6,
"seven": 7
}
]
},
{
"one": 1,
"two": 2
}
]
变成这样的东西(期望的结果):
{
"0": {
"prefix[0]one": 1,
"prefix[0]three[0]five": 5,
"prefix[0]three[0]four": 4,
"prefix[0]three[1]seven": 7,
"prefix[0]three[1]six": 6,
"prefix[0]two": 2
},
"1": {
"prefix[1]one": 1,
"prefix[1]two": 2
}
}
现在我找到了一个脚本,该脚本在展平数据方面非常有效(良好的起点),但我试图弄清楚如何调整代码,以便将每个顶级数组/对象分组到它自己的数组/对象,而不是像脚本在该页面上所做的那样是一个大的单个对象 (see accepted answer "JSON.flatten")。
这是迄今为止我获得的最简洁的版本,它与原始版本没有太大区别。我已经尝试了比这更多的东西,但它太草率了,无法发布。
JSON.flatten = function(data) {
var result = {};
function recurse (cur, prop) {
if (Object(cur) !== cur) {
result[prop] = cur;
} else if (Array.isArray(cur)) {
for(var i=0, l=cur.length; i<l; i++)
recurse(cur[i], prop + "[" + i + "]");
if (l == 0)
result[prop] = [];
} else {
var isEmpty = true;
for (var p in cur) {
isEmpty = false;
recurse(cur[p], prop ? prop+p : p);
}
if (isEmpty && prop)
result[prop] = {};
}
}
recurse(data, "prefix");
return result;
}
这是当前代码产生的结果:
{
"prefix[0]one": 1,
"prefix[0]three[0]five": 5,
"prefix[0]three[0]four": 4,
"prefix[0]three[1]seven": 7,
"prefix[0]three[1]six": 6,
"prefix[0]two": 2,
"prefix[1]one": 1,
"prefix[1]two": 2
}
注意:我不一定需要使用提供的示例代码。任何达到预期结果的代码都可以。
谢谢大家!
更新:
我意识到我想要的输出需要更像这样:
{
"0": {
"prefix[0][one]": 1,
"prefix[0][three][0][five]": 5,
"prefix[0][three][0][four]": 4,
"prefix[0][three][1][seven]": 7,
"prefix[0][three][1][six]": 6,
"prefix[0][two]": 2
},
"1": {
"prefix[1][one]": 1,
"prefix[1][two]": 2
}
}
但即使在使用 CViejo 的建议将其设置为这样的格式后,我最终还是发现由于嵌套对象,这完全行不通。它们也必须是无限级别的对象。所以我接受了 Tomalak 的建议并尝试递归方法并在我进行时分配值。我只是想感谢你们提供了一些很好的建议!
最佳答案
我看不出调整已经按照它说的正确的扁平化功能有什么意义。相反,既然您只想格式化数据(无论出于何种原因),为什么不格式化扁平化输出以满足您的需要呢?
function formatFlat(obj, prefix){
var result = {};
for (var key in obj) {
var newKey = key.replace(prefix + "[", "").split("]")[0];
if(!result[newKey]){
result[newKey] = {};
}
result[newKey][key] = obj[key];
}
return result;
}
这样调用它:
console.log( formatFlat(JSON.flatten(yourData), "prefix") );
关于javascript - 使用 Javascript 将嵌入式 JSON 对象展平为单级数组/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32242423/