#javascript #json
Вопрос:
Есть ли способ получить доступ к значению JSON с помощью составного строкового ключа ?
Позвольте мне объяснить, у меня есть следующий объект JSON :
{
"guy1":
{
"name":"Joe"
}
}
Предположим, у нас есть массив guysArray
, содержащий несколько объектов JSON, подобных приведенному выше, и строковую переменную
let pathToName = "guy1.name"
Я заметил, что так поступить невозможно :
guysArray[i].pathToName
Единственно правильный путь :
guysArray[i].guy1.name
guysArray[i]["guy1"]["name"]
Как я мог бы сделать это программно, не записывая путь элемент за элементом ?
Обязан ли я создавать структуру цикла или для этого существует лучшая структура сохранения pathToName
?
Комментарии:
1. Проверьте Lodash.получите
2. Я не знал, что эта библиотека предоставляет эту функцию ! Это прекрасно, спасибо 🙂
Ответ №1:
попробуйте вот это :
let yourData = `{
"guy1":
{
"name":"Joe"
}
}`
let stringToJson = JSON.parse(yourData)
let wantedValue = stringToJson['guy1'].name
console.log(wantedValue)
Комментарии:
1. Ваш код
stringToJson['guy1'].name
похож наstringToJson['guy1']["name"]
илиstringToJson.guy1.name
, и я этого не ищу.2. Мне нужен способ сделать
stringToJson["path"]
илиstringToJson.path
получить непосредственно желаемое значение.
Ответ №2:
Как я мог бы сделать это программно, не записывая путь элемент за элементом ?
к сожалению, вы мало что можете сделать с помощью простых операторов и синтаксиса JavaScript, не добавляя что-то вроде пользовательской функции. Вы можете сделать
> guysArray[i].guy1.name
"Joe"
но это не слишком поможет вам прямо сейчас, если вы хотите чего-то более общего.
Обязан ли я создавать структуру цикла или есть лучшая структура сохранения для имени пути?
Функция будет работать нормально, но вам может показаться интересной идея о том, что последовательность ключей в JSON может быть путем к значению.
В вашем случае имя находится в пути "guy1.name"
, поэтому вы можете выполнить функцию, которая использует этот путь, разбивает его на "."
части, а затем проходит по JSON, используя элементы пути в качестве ключей.
> fromPath(guysArray[i], "guy1.name")
"Joe"
Эта идея описывается как JSONPath и должна быть выполнима для вас в качестве вашей собственной функции.
Комментарии:
1. Спасибо, это то, что я хотел знать 🙂
2. По сути, я искал способ быть более общим в своем подходе.