【发布时间】:2014-04-06 13:22:22
【问题描述】:
我有一个从 XML 到 js 函数返回的 JSON 对象。这个 xml 转换器为每个条目创建数组,即使它们应该是字符串。我无法修改这个原始函数,因此我想获取我的最终 json 对象,遍历它,检测一个值是否是长度为 1 的数组,如果是,则将该数组更改为字符串。
原始对象:
var json = {
user: {
name: ["bob"],
email: ["bob@example.org"]
},
items: [{
name: ["Object 1"]
},{
name: ["Object 2"]
}]
}
应该变成:
var json = {
user: {
name: "bob",
email: "bob@example.org"
},
items: [{
name: "Object 1"
},{
name: "Object 2"
}]
}
我已经考虑过 reviver 函数,但是 a) 我想避免返回到字符串 b) 我不确定这是否可行,因为它可能只是单独为我提供每个数组元素。
【问题讨论】:
-
这很难,因为它必须是递归的。我觉得你应该在它发生时处理这个案子,通过简单的检查
if ($.isArray(val) && val.length == 1) {...}。要么让后端程序员返回你需要的东西,而无需你修改它。 -
如果你要做很多这样的事情,值得注意的是lodash 是一个优秀的库。
-
@BenjaminRH 你是说 lodash 有这个功能吗?还是您建议使用其中一种递归函数并应用我自己的过滤器?
-
它没有解决这个特定情况的函数,我只是说它有很多有用的函数来迭代和操作数组和对象,例如
_.forEach,_.isObject,和_.isArray -
@Yashua 例如,这是接受的答案,使用 lodash:jsfiddle.net/YnFyS
标签: javascript arrays json node.js