JSON拆分了两条不同的路径

时间:2018-02-06 16:35:44

标签: javascript c# json

美好的一天,

我正在创建一个JSON脚本,允许对象获取值或继续数据路径

例如:

{
  "A" : {
    "B" : "123"
  }
}

在上面的例子中,如果我得到A.B的值,我得到123的结果。但是我也希望A有自己的值,例如" XYZ"。

所以我们说,A是什么?它将返回" XYZ"我还说,什么是A.B它将返回" 123"

我希望这是有道理的,JSON似乎遵循单一路径,但我希望能够遵循路径并为每个节点分配值。它就像节点有一个值,但它也有子节点和父节点。

非常感谢任何有关理论的帮助

4 个答案:

答案 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将返回XYZA.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

所以你要做的就是不可能。

https://www.w3schools.com/js/js_json_intro.asp

答案 3 :(得分:0)

我不确定我是否理解您的问题,但似乎应该在请求之前或响应之前弄清楚找出您正在寻找的JSON字符串的逻辑。返回多条逻辑路径似乎不是一个好主意。