Фильтр JSON тройной вложенный - PullRequest
0 голосов
/ 31 января 2019

В настоящее время имеет файловую структуру JSON и в настоящее время пытается использовать поисковый запрос для проверки глубины на 3 уровня.

Поля поиска : [dynamic].[dynamic].[dynamic].value.title и [dynamic].[dynamic].[dynamic].value.description.

Все, что заявлено как динамическое, генерируется через JS в любом случае, однако я пытаюсь найти наиболее оптимальное / готовое к работе.

Попытка : Это моя текущая попытка, и я думаю, что еслия могу пройти через вложенный динамический json с 3-мя слоями циклов.

В данный момент это не работает, что будет лучшим способом для поиска запроса: «что-то», и оно переходит к [dynamic].[dynamic].[dynamic].value.title и [dynamic].[dynamic].[dynamic].value.description и возвращает заголовок

const filteredData = Object.values(components)
    .filter(key => key)
    .map(function(something) {
        return something;
    });

JSON

{
  "a11": {
    "a22": {
      "colours": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "fonts": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 3
        }
      }
    },
    "b22": {
      "logo": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "c22": {
      "unordered": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "ordered": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 3
        }
      }
    },
    "d22": {
      "head": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "foot": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 2
        }
      }
    },
    "e22": {
      "headings": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "time": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 7
        }
      }
    }
  },
  "b11": {
    "f22": {
      "menu": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "g22": {
      "product-item": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "h22": {
      "search": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "i22": {
      "sub-menu": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    }
  },
  "c11": {
    "j22": {
      "footer": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "title": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 2
        }
      }
    },
    "k22": {
      "header": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете создать рекурсивную функцию для хранения объекта свойства «значение» нижнего уровня в массиве.Или любую собственность, которую вы хотите по этому вопросу.

Следующий код будет проверять вложенные объекты до тех пор, пока не будет найдено свойство "value" или не останется объектов, которые являются объектами.

var components = {
  "a11": {
    "a22": {
      "colours": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "fonts": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 3
        }
      }
    },
    "b22": {
      "logo": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "c22": {
      "unordered": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "ordered": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 3
        }
      }
    },
    "d22": {
      "head": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "foot": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 2
        }
      }
    },
    "e22": {
      "headings": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "time": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 7
        }
      }
    }
  },
  "b11": {
    "f22": {
      "menu": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "g22": {
      "product-item": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "h22": {
      "search": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    },
    "i22": {
      "sub-menu": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    }
  },
  "c11": {
    "j22": {
      "footer": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      },
      "title": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 2
        }
      }
    },
    "k22": {
      "header": {
        "value": {
          "title": "title here",
          "description": "something here",
          "priority": 1
        }
      }
    }
  }
}

var arr = []; // to store "value" objects
function getValues(obj) { // recursive function
  Object.keys(obj).forEach(function(key) { // loop through properties on current level
     if (key === 'value') { arr.push(obj[key]); } // store property object in array
     else if (typeof obj[key] === 'object') { // recursive call if object
       getValues(obj[key]);
     }
  });
}

getValues(components);
console.log(arr);
0 голосов
/ 01 февраля 2019

Вы можете просмотреть все динамические ключи и получить доступ ко всем статическим значениям определенного динамического ключа третьего уровня, например:

function query(param) {
    for (lvl1key of Object.keys(json)) {
      for (lvl2key of Object.keys(json[lvl1key])) {
        for (lvl3key of Object.keys(json[lvl1key][lvl2key])) {
          if(lvl3key === param) {
            let title = json[lvl1key][lvl2key][lvl3key].value.title;
            let description = json[lvl1key][lvl2key][lvl3key].value.description;
            //do something with it
            console.log(title, description);
          }
        }
      }
    }
  }

const json = {
    "a11": {
      "a22": {
        "colours": {
          "value": {
            "title": "title here",
            "description": "something here",
            "priority": 1
          }
        },
        "fonts": {
          "value": {
            "title": "title here",
            "description": "something here",
            "priority": 3
          }
        }
      },
      "b22": {
        "logo": {
          "value": {
            "title": "title here",
            "description": "something here",
            "priority": 1
          }
        }
      }
    }
}
  
  function query(param) {
    for (lvl1key of Object.keys(json)) {
      for (lvl2key of Object.keys(json[lvl1key])) {
        for (lvl3key of Object.keys(json[lvl1key][lvl2key])) {
          if(lvl3key === param) {
            let title = json[lvl1key][lvl2key][lvl3key].value.title;
            let description = json[lvl1key][lvl2key][lvl3key].value.description;
            //do something with it
            console.log(title, description);
          }
        }
      }
    }
  }
  
  query('colours');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...