Проблема с объектом

  • Автор темы Автор темы Dmitron
  • Дата начала Дата начала

Dmitron

A-Parser Enterprise License
A-Parser Enterprise
Помогите пожалуйста! Весь мозг сломал :)

Есть такой массив

{"pass":{"length":9,"values":["c19283374","Audi100"]},"email":{"length":16,"values":["[email protected]","[email protected]"]},"__infos__":{"count":2,"table":"My_User","db":"qwerty123"}}

Мне нужно исключить __infos__ и взять строки из pass и email (названия этих ключей могут меняться!!)
Но не просто взять, а сопоставить емейл и пароль и положить друг с другом через разделитель :

В результате нужно

[email protected]:c19283374
[email protected]:Audi100

Буду премного благодарен!
 
Это нужно сделать в JS парсере или шаблонизатором в обычном пресете?
Размер массивов pass.values и email.values всегда совпадает?
 
Это нужно сделать в JS парсере или шаблонизатором в обычном пресете?
Размер массивов pass.values и email.values всегда совпадает?

Я пишу JS парсер для своего сайта.
values совпадают, но могут быть пустые значения.
 
В этом обьекте всегда аналогичная структура? Т.е. 3 ключа, среди которых __infos__ и два с заранее неизвестными именами. И каждый из этих неизвестных ключей содержит в себе массив values - верно? Если да, то как понять что считать почтой (выводить в списке первым), а что паролем (выводить вторым)?
 
В этом обьекте всегда аналогичная структура? Т.е. 3 ключа, среди которых __infos__ и два с заранее неизвестными именами. И каждый из этих неизвестных ключей содержит в себе массив values - верно? Если да, то как понять что считать почтой (выводить в списке первым), а что паролем (выводить вторым)?
Структура всегда аналогичная примеру.

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

Для почты это mail
Для пароля pass
 
Код:
    let json = {"pass":{"length":9,"values":["c19283374","Audi100"]},"email":{"length":16,"values":["[email protected]","[email protected]"]},"__infos__":{"count":2,"table":"My_User","db":"qwerty123"}};
    
    // исключаем __infos__
    delete json['__infos__']

    // ищем имена ключей
    let mailKey, passKey;
    for(let item of Object.keys(json)) {
        if(/mail/.test(item))
            mailKey = item;
        else if(/pass/.test(item))
            passKey = item;
    }

    // выводим результат
    if(!mailKey || !passKey) {
        this.logger.put('Error');
    } else {
        for(let i = 0; i < json[mailKey].values.length; i++) {
            this.logger.put(json[mailKey].values[i] + ';' + json[passKey].values[i]);
        }
    }
 
Код:
    let json = {"pass":{"length":9,"values":["c19283374","Audi100"]},"email":{"length":16,"values":["[email protected]","[email protected]"]},"__infos__":{"count":2,"table":"My_User","db":"qwerty123"}};
   
    // исключаем __infos__
    delete json['__infos__']

    // ищем имена ключей
    let mailKey, passKey;
    for(let item of Object.keys(json)) {
        if(/mail/.test(item))
            mailKey = item;
        else if(/pass/.test(item))
            passKey = item;
    }

    // выводим результат
    if(!mailKey || !passKey) {
        this.logger.put('Error');
    } else {
        for(let i = 0; i < json[mailKey].values.length; i++) {
            this.logger.put(json[mailKey].values[i] + ';' + json[passKey].values[i]);
        }
    }

То что нужно!
Огромное спасибо за помощь и самый лучший парсер, который я знаю!
 
Всё же один момент остался в этом коде.

Код:
    for(let item of Object.keys(json)) {
        if(/mail/.test(item))
            mailKey = item;
        else if(/pass/.test(item))
            passKey = item;
    }

Оказалось, что структура не всегда одинаковая.
Бывают похожие ключи, например email, email_to, sendEmail
Но не в каждом есть values с емейлами.
Можно как то проверить на наличие знака @ в values и брать только тот ключ, который содержит этот символ?

Пробовал добавить такую проверку, но не помогло.

Код:
                            if(/@/.test(item['values'])){
                            
                                mailKey = item;
                            
                            }
 
Как-то так примерно:
Код:
for(let item of Object.keys(json)) {
    if(!mailKey && json[item].values) {
        for(let value of json[item].values) {
            if(/@/.test(value)) {
                mailKey = item;
                break;
            }
        }
    } else if(/pass/.test(item)) {
        passKey = item;
    }
}
 
Назад
Верх