@tenaro

Ка найти номер строки в json по путю из ключей?

vue3 / редактор: jsoneditor
подскажите готовое решение для поиска в json строки, на которой находится определенный ключ
{
    a: [
        b: {
            c: 'target'
        }
    ]
}
getLine(['a','b','c']) // => 4
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@tenaro Автор вопроса
findLine = () => {
    const count = getDataLinesCount(json.value, ['special_states','somepath'])
    console.log('line on: ', count)
},
getDataLinesCount = (data, path, count = 1) => { // path == null - если в текущем элементе нет искомых ключей
    if (typeof data == 'undefined') return count - 1 // в моем редакторе не выводятся эти значения
    if (typeof data == 'string' || typeof data == 'number' || typeof data == 'boolean' || !data) return count
    if (Array.isArray(data)) data = Object.assign({}, data)
    for (let key in data) {
        count++
        const item = data[key]
        if (!path || path[0] != key) {
            count = getDataLinesCount(item, null, count)
        } else {
            if (path.length == 1) return count
            else {
                path.shift()
                return getDataLinesCount(item, path, count)
            }
        }
    }
    if (Object.keys(data).length) count++
    return count
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
let obj = {
    a: {
        b: {
            c: 'target'
        }
    }
};
let target = "target";
let lineIndex = JSON.stringify(obj, null, " ").split("\n").findIndex(t=>-1!==t.indexOf(target)); // +1 если нужен номер, а не индекс

PS: у вас невалидный JSON
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы