我有一个像这样的对象
{ "status": "success", "auth": { "code": "23123213", "name": "qwerty asdfgh" } }
Run Code Online (Sandbox Code Playgroud)
我想将其转换为点符号(一级)版本,如:
{ "status": "success", "auth.code": "23123213", "auth.name": "qwerty asdfgh" }
Run Code Online (Sandbox Code Playgroud)
目前我正在使用字段手动转换对象,但我认为应该有更好,更通用的方法来执行此操作.有没有?
注意:有一些示例显示相反的方式,但我找不到确切的方法.
注意2:我希望它与我的服务器端控制器动作绑定一起使用.
pim*_*vdb 28
您可以递归地将属性添加到新对象,然后转换为JSON:
var res = {};
(function recurse(obj, current) {
for(var key in obj) {
var value = obj[key];
var newKey = (current ? current + "." + key : key); // joined key with dot
if(value && typeof value === "object") {
recurse(value, newKey); // it's a nested object, so do it again
} else {
res[newKey] = value; // it's not an object, so set the property
}
}
})(obj);
var result = JSON.stringify(res); // convert result to JSON
Run Code Online (Sandbox Code Playgroud)
您可以使用 NPM点对象( Github ) 进行对象到点表示法的转换,反之亦然。
var dot = require('dot-object');
var obj = {
id: 'my-id',
nes: { ted: { value: true } },
other: { nested: { stuff: 5 } },
some: { array: ['A', 'B'] }
};
var tgt = dot.dot(obj);
Run Code Online (Sandbox Code Playgroud)
生产
{
"id": "my-id",
"nes.ted.value": true,
"other.nested.stuff": 5,
"some.array[0]": "A",
"some.array[1]": "B"
}
Run Code Online (Sandbox Code Playgroud)
小智 5
当你获得undefined
第一个前缀时,这是一个修复/黑客攻击.(我做了)
var dotize = dotize || {};
dotize.parse = function(jsonobj, prefix) {
var newobj = {};
function recurse(o, p) {
for (var f in o)
{
var pre = (p === undefined ? '' : p + ".");
if (o[f] && typeof o[f] === "object"){
newobj = recurse(o[f], pre + f);
} else {
newobj[pre + f] = o[f];
}
}
return newobj;
}
return recurse(jsonobj, prefix);
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8571 次 |
最近记录: |