gpt4 book ai didi

javascript - 解析具有重复键的嵌套 JSON 对象(PHP 或 JS)

转载 作者:行者123 更新时间:2023-11-29 19:10:45 25 4
gpt4 key购买 nike

我正在构建一个基于我从 API 获取的数据的应用程序,该 API 的格式类似于 json_encode() 函数的响应。现在,我不知道如何(我知道这是可能的)API 不时返回重复键。由于修复重复键不是我的网站,我必须找到一个解决方案,如何将此响应解析为包含发送给我的所有数据的可用数组。我想通过在键中添加“x01”、“x02”、“x03”...来重命名重复的键。到目前为止,我已经找到了一种可以提供帮助的解决方案 ( here ),但对我来说它只适用于更简单的数组——我处理嵌套数组。因此,这是一个演示 API 响应:

{"boss":"mike",
"employees":{
"Josh":{
"active":"1",
"hours":"12",
"name":"Josh"},
"Josh":{
"active":"1",
"hours":"3",
"name":"Josh"}
}
}

因此,如您所见,几乎整个“Josh”键都是重复的(“小时”子键除外)。尽管它看起来像一个错误,但这两个值对我来说都很重要。所以,这是我想要获得的数组:

array (
"boss" => "mike",
"employees" = array (
"x01Josh" = array ("active" => "1", "hours" => "12", "name" => "Josh")
"x02Josh" = array ("active" => "1", "hours" => "3", "name" => "Josh")
)
)

我有一个想法,甚至一次检查一个词是字符串、双引号、逗号还是任何大括号,并相应地构建一个函数。我认为这将需要很长且效率低下的代码(处理缓慢)。

由于我是 RegEx 的新手,而且我也没有找到解决方案(我确信它存在,但我没有设法找到它),所以我向您寻求帮助。

我计划用 JavaScript/jQuery 或 PHP(使用另一个 JSON 请求)解析它。提前致谢。

更新 我忘了提 - 我这样做的原因是因为第二个 key 覆盖了第一个(重复)。此外,我无法更改 API(这不是我网站的 API)。我已经要求他们针对这些问题实现一些更改,但与此同时,我必须从我这边去做。

最佳答案

使用 String.replaceString.matchArray.filterJS 解决方案Array.shift 函数:

var jsonData = '{"boss":"mike","employees":{"Josh":{"active":"1","hours":"12","name":"Josh"},"Josh":{"active":"1","hours":"3","name":"Josh"}}}',
re = /\"(\w+?)(?=\":\{)/g, names = {}, dups;

jsonData.match(re).forEach(function(v){
v = v.replace(/\"/, "");
(!names[v])? names[v] = 1 : names[v]++;
});

dups = Object.keys(names).filter(function(k) { return names[k] > 1; }); // getting duplicated keys
dups.forEach(function (k) {
var count = names[k], i;
names[k] = [];

for (i = 0; i < count; i++) {
names[k].push("x0" + (i+1));
}
});

jsonData = jsonData.replace(re, function (p1) { // replacing duplicate keys
p1 = p1.substr(1);
if (dups.indexOf(p1) !== -1) {
return '"' + names[p1].shift() + p1;
} else {
return '"' + p1;
}
});

console.log(JSON.parse(jsonData));

关于javascript - 解析具有重复键的嵌套 JSON 对象(PHP 或 JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38992106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com