【发布时间】:2016-12-23 20:15:48
【问题描述】:
我正在构建一个应用程序,该应用程序基于我从 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 请求)。 提前致谢。
更新我忘了提 - 我这样做的原因是因为第二个键覆盖了第一个键(重复)。此外,我无法更改 API(这不是我网站的 API)。我已经要求他们对这些问题进行一些更改,但与此同时,我必须从我这边去做。
【问题讨论】:
-
在 javascript 中,一个重复的键会覆盖第一个键。在严格模式下,它会返回一个错误。
-
完全正确 - 这就是为什么我需要以某种方式解析它,以便它可以在没有错误或覆盖的情况下使用。
-
这些重复的键是否完全排在后面?
-
是的。另外,有时只有一个“josh”实例,有时是两个(因此重复)。
-
尽你所能找出数据不可预测的原因。看起来你是在根据数据的不可靠性做补丁,看起来是在浪费时间。此外,如果您无法控制外部 API。
标签: javascript php arrays json regex