Как я могу найти переменную JSON, не зная имен родительских переменных?

#json #minecraft

#json #Minecraft

Вопрос:

Мне нужно установить переменную DisplayName, но я понятия не имею, как к ней добраться. Для контекста я создаю приложение на C #, чтобы установить для этой переменной значение чего-то другого. Родительские переменные для DisplayName различаются в зависимости от пользователя, который использует это приложение.

Я размыл их, чтобы не раскрывать свою личную информацию.

Скриншот кода.

Я думаю, что мне может понадобиться перебирать дочерние объекты JSON, но я не уверен.

Ответ №1:

Эй, значит, вы правы, вам придется перебирать объект и выполнять поиск, чтобы найти отображаемое имя.

Я написал небольшую функцию ниже, которая будет рекурсивно проходить по объекту и искать displayName . Очевидно, что это сложно, если вы никогда не знаете местоположение или путь, поэтому у вас должен быть довольно открытый способ поиска объекта JSON.

Если вы можете контролировать способ запроса данных, возможно, вы могли бы изменить формат, чтобы структура данных была более последовательной, но я действительно ничего не знаю о том, откуда вы получаете данные.

Это всего лишь один из многих способов сделать это.

 const obj = {
  authenticationDatabase : {
    accessToken: 'Mock',
    profiles: {
      displayName: 'THIS IS A MOCK USER NAME'
    },
    properties: [],
    username: 'MOCK'
  }
}

const obj2 = {
  authenticationDatabase : {
    accessToken: 'Mock',
    profiles: {
      deep: {
        nested: {
          object: {
            displayName: 'THIS IS A MOCK USER NAME'
          }
        }
      }
    },
    properties: [],
    username: 'MOCK'
  }
}

const findDisplayName = obj => {
  if(!obj || typeof(obj) != 'object'){
    return false;
  }
  if(Object.keys(obj).includes("displayName")){
    return obj["displayName"]
  }

  for(const key in obj){
    if(findDisplayName(obj[key])){
      return findDisplayName(obj[key])
    }
  }
  return false;
}

console.log(findDisplayName(obj))
console.log(findDisplayName(obj2))