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

标签 javascript php arrays json regex

我正在构建一个应用程序,该应用程序基于我从 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”键都是重复的(“hours”子键除外)。尽管它看起来像是一个错误,但这两个值对我来说都很重要。 所以,这是我想要获得的数组:

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

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

由于我是正则表达式的新手,并且由于我也没有找到解决方案(我确信它存在,但我没有找到它),所以我向您寻求帮助。

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

更新我忘了提及 - 我这样做的原因是因为第二个键覆盖了第一个键(重复)。另外,我无法更改 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/

相关文章:

javascript - 我怎样才能过33岁!在浏览器中使用Javascript?

php - 2006 : MySQL server has gone away

java - 你能有一组不同种类的对象吗?

php - 重命名到我的数据库后如何插入/保存新文件名?

javascript - 如何从 ajax 中的输入获取数组中的检查值

逗号分隔列表中的 PHP 数组

arrays - 根据数据中的关系对数组进行切片(在 Ruby 中)

javascript - RegExp 用于验证网站 URL 不适用于数组

javascript - this.attribute 构造后未定义

javascript - 如何防止重复触发自定义事件 – 或者我可以 "reset"jQuery .one() 函数吗?