Создать строковый ключ для сложного пути JSON
Мне нужно получить доступ и провести серию операций на большом объекте 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]
но узел даже не работает с:
result['project.properties']
тем более весь глубокий путь, который я должен использовать.
Есть ли хороший способ сделать путь многократно используемым без необходимости набирать текст целиком более одного раза?
2 ответа
result[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'];
Это сохранит ссылку на это "местоположение" в вашем более крупном объекте, и вы можете ссылаться на атрибуты внутри, как reference[attribute]
,
Причина result['project.properties']
не работает то, что он ищет атрибут с ключом 'project.properties', которого нет у вашего объекта.