美好的一天,
我正在创建一个JSON脚本,允许对象获取值或继续数据路径
例如:
{
"A" : {
"B" : "123"
}
}
在上面的例子中,如果我得到A.B的值,我得到123的结果。但是我也希望A有自己的值,例如" XYZ"。
所以我们说,A是什么?它将返回" XYZ"我还说,什么是A.B它将返回" 123"
我希望这是有道理的,JSON似乎遵循单一路径,但我希望能够遵循路径并为每个节点分配值。它就像节点有一个值,但它也有子节点和父节点。
非常感谢任何有关理论的帮助
答案 0 :(得分:2)
您可以使用reduce()
方法创建自定义函数,以便能够将嵌套键作为字符串传递。
const data = {"A": {"B": "123"}}
const getPath = (path, obj) => {
return path.split('.').reduce(function(r, e, i, arr) {
return r[e] || (arr[i + 1] ? {} : undefined)
}, obj)
}
console.log(getPath('A.B', data))
console.log(getPath('A', data))
console.log(getPath('A.C', data))
如果你想总是在路径中返回最后找到的值,你可以改用它。
const data = {
"A": {
"B": "123",
"C": {"D": 2}
}
}
const getPath = (path, obj) => {
return path.split('.').reduce((r, e) => (r[e] || r ), obj)
}
console.log(getPath('A.B', data))
console.log(getPath('A.C.F.G', data))
console.log(getPath('A.B.Q', data))
答案 1 :(得分:1)
您不能为对象属性分配2个不同的值。你可以做这样的事情:
{
"A" : {
"B" : "123",
"value" : "XYZ"
}
}
引用A.value
将返回XYZ
,A.B
将返回123
编辑:
如果您使A
函数返回所需的值,则可以将属性指定给A
。但这可能是一个不好的做法:
let A = function () {
return 'XYZ';
}
A.B = '123';
let obj = {
A
};
console.log(A()); // XYZ
console.log(A.B); // 123
答案 2 :(得分:1)
JSON
代表JavaScript Object Notation
,这意味着JSON代表一个对象。对象的每个属性可能只有一个值。在您的情况下,这是以下内容:
var a = { "A": { "B": "123"}
这表示像{ A: { B: 123}
这样的对象,这意味着:
console.log(a.A) // {B: 123}
console.log(a.A.B) // 123
所以你要做的就是不可能。
答案 3 :(得分:0)
我不确定我是否理解您的问题,但似乎应该在请求之前或响应之前弄清楚找出您正在寻找的JSON字符串的逻辑。返回多条逻辑路径似乎不是一个好主意。