Node.js 创建复杂json路径的字符串键

Node.js 创建复杂json路径的字符串键,node.js,jsobject,Node.js,Jsobject,我需要在一个大的json对象上访问并执行一系列操作。我需要阅读和修改的一些内容在树的深处,有如下路径: result.project.properties[0]['hudson.model.ParametersDefinitionProperty'][0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition'] 这条路是我将反复参考的。我希望能够做到以下几点: key = "project.properties[0]

我需要在一个大的json对象上访问并执行一系列操作。我需要阅读和修改的一些内容在树的深处,有如下路径:

result.project.properties[0]['hudson.model.ParametersDefinitionProperty'][0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition']
这条路是我将反复参考的。我希望能够做到以下几点:

key = "project.properties[0]['hudson.model.ParametersDefinitionProperty']  [0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition']"
然后我可以像这样读写路径:

result[key]
但node甚至不适用于:

result['project.properties']
更不用说我必须使用的整个深路径了


有没有一种好方法可以使路径可重用,而不必多次键入整个内容?

result[key]
引用一个对象(key),您将其初始化为:

key = "project.properties[0]['hudson.model.ParametersDefinitionProperty']  [0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition']"
在JSON对象中,没有具有如此大名称的对象,因此它不起作用。 如果您不想键入全部内容,请尝试以下方法:

shortResult = result.project.properties[0]['hudson.model.ParametersDefinitionProperty'][0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition'];

从这里,您可以访问“BooleanParameterDefinition”中的内容。

结果[key]
指的是一个对象(key),您将其初始化为:

key = "project.properties[0]['hudson.model.ParametersDefinitionProperty']  [0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition']"
在JSON对象中,没有具有如此大名称的对象,因此它不起作用。 如果您不想键入全部内容,请尝试以下方法:

shortResult = result.project.properties[0]['hudson.model.ParametersDefinitionProperty'][0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition'];

从这里,您可以访问“BooleanParameterDefinition”中的内容。

您是否尝试过类似的方法

var reference = result.project.properties[0]['hudson.model.ParametersDefinitionProperty'][0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition'];
这将在较大的对象中保留对该“位置”的引用,并且您可以在is中引用属性,如
reference[attribute]


result['project.properties']
不起作用的原因是它正在查找一个键为'project.properties'的属性,而您的对象没有该键。

您是否尝试过类似的方法

var reference = result.project.properties[0]['hudson.model.ParametersDefinitionProperty'][0].parameterDefinitions[0]['hudson.model.BooleanParameterDefinition'];
这将在较大的对象中保留对该“位置”的引用,并且您可以在is中引用属性,如
reference[attribute]


result['project.properties']
不起作用的原因是它正在查找一个键为'project.properties'的属性,而您的对象没有该属性。

对,但不是通过引用。“shortResult”将只是BooleanParameterDefinition的一个副本,因此对它的更改将只应用于该副本,而不是原始json对象。所以我必须再次输入整个json对象地址,将其设置为shortResult。这是我希望避免的,我错了。shortResult确实是对对象中该点的引用,因此键入“shortResult=''”与键入整个路径并将其设置为某个值相同,因此您的答案有效。实际上,我在提出问题之前就已经写出了这个解决方案,但只是假设它行不通。很抱歉,是的,但不是通过引用。“shortResult”将只是BooleanParameterDefinition的一个副本,因此对它的更改将只应用于该副本,而不是原始json对象。所以我必须再次输入整个json对象地址,将其设置为shortResult。这是我希望避免的,我错了。shortResult确实是对对象中该点的引用,因此键入“shortResult=''”与键入整个路径并将其设置为某个值相同,因此您的答案有效。实际上,我在提出问题之前就已经写出了这个解决方案,但只是假设它行不通。很抱歉。唯一的问题是它不是一个参考,而是该位置的副本。如果我想修改更大的json对象中的项,我每次都必须键入那个长地址,我认为这是不对的。除非我错了(这可能是因为我没醒那么久),否则javascript会通过引用保存对象,除非您显式地对其进行深度复制。尽管如此,您可以通过创建一个对象、引用它、对其中一个对象进行更改以及记录另一个对象来轻松测试这一点。我会检查并让您知道。你可能是对的,但我很确定节点不会通过引用传递。我已经在Chrome的浏览器中尝试并确认了通过引用传递。以下是我所做工作的要点。唯一的问题是它不是一个引用,而是该位置的副本。如果我想修改更大的json对象中的项,我每次都必须键入那个长地址,我认为这是不对的。除非我错了(这可能是因为我没醒那么久),否则javascript会通过引用保存对象,除非您显式地对其进行深度复制。尽管如此,您可以通过创建一个对象、引用它、对其中一个对象进行更改以及记录另一个对象来轻松测试这一点。我会检查并让您知道。你可能是对的,但我很确定节点不会通过引用传递。我已经在Chrome的浏览器中尝试并确认了通过引用传递。以下是我所做工作的要点。